2012年8月14日火曜日

5.1 テーブルの作成と更新


データベースにデータを登録するには、まずテーブルを作成する必要があります。

5.1.1 テーブルの作成


テーブルを作成するには、SQLコマンドのCREATE TABLEを使います。
CREATE TABLE テーブル名(列名データ型, 列名データ型,...);
各列には、挿入するデータの種類をデータ型で指定します。データ型から外
れたデータは挿入できません。適切なデータ型を使用することで、データの
整合性を高く保つことができます。
mysql> CREATE TABLE staff (id VARCHAR(4), name VARCHAR(20), age INT, bid VARCHAR(4));

SQLは「;」を行末としますので、以下のように複数行に分けて見やすくす
ることもできます。行末に「;」を入力するまで、続けて何行も入力するこ
とができます。その間、プロンプトは「-> 」に変更されます。

mysql> CREATE TABLE staff (
-> id VARCHAR(4),
-> name VARCHAR(20),
-> age INT, bid VARCHAR(4)
-> );

※途中で入力を取りやめたい場合は「¥c」と入力します。


MySQLでは、以下のデータ型を利用することができます。


MySQLのデータ型

カテゴリデータ型説明
数値TINYINT 1バイトの整数
SMALLINT 2バイトの整数
MEDIUMINT 3バイトの整数
INT 4バイトの整数
BIGINT 8バイトの整数
FLOAT 4バイトの浮動小数点数
DOUBLE 8バイトの浮動小数点数
BIT ビット列
日付・時刻DATE YYYY-MM-DD(1000-01-01~9999-12-31)
DATETIME YYYY-MM-DD HH:MM:SS(1000-01-01
00:00:00~9999-12-31 23:59:59)
TIME HH:MM:SS
TIMESTAMP YYYY-MM-DD HH:MM:SS(1970-01-01
00:00:01~2037-12-31 23:59:59)
YEAR YYYY(1901~2155)、YY(01~69、70~99)
文字列CHAR(L) 0~255文字の固定長文字列
VARCHAR(L) 0~65535文字の可変長文字列
TINYTEXT 255バイトまでの文字列(大文字小文字の区別なし)
TINYBLOB 255バイトまでの文字列(大文字小文字の区別あり)
TEXT 65535バイトまでの文字列(大文字小文字の区別なし)
BLOB 65535バイトまでの文字列(大文字小文字の区別あり)
MIDIUMTEXT 16777215バイトまでの文字列(大文字小文字の区別なし)
MIDIUMBLOB 16777215バイトまでの文字列(大文字小文字の区別あり)
LONGTEXT 4294967295バイトまでの文字列(大文字小文字の区別なし)
LONGBLOB 4294967295バイトまでの文字列(大文字小文字の区別あり)







2012年8月13日月曜日

4.3 MySQLとプログラミング言語の連携


プログラミング言語からMySQLに接続して利用するためには、そ
れぞれの言語に対応したライブラリが必要になります。

4.3.1 MySQLとPHPの連携

PHPは、Webアプリケーションの開発によく利用されるスクリプト言語で
す。各種データベースとのインターフェースが用意されているので、
MySQLをはじめとする各種データベースと簡単に連携できます。
CentOSをはじめとするLinuxディストリビューションでは、php-mysqlパッ
ケージをインストールすることでPHPとMySQLを連携させることができま
す。
# yum install php-mysql -y

4.3.2 MySQLとRubyの連携

RubyはWebアプリケーションをはじめ、さまざまな分野で利用できるスク
リプト言語です。RubyプログラムからMySQLを利用するためには、
MySQL/RubyかRuby/MySQLが必要です。MySQL/RubyはC言語で作られ
たライブラリで、MySQL標準のC APIとRubyとの仲介役を果たします。ま
た、Ruby/MySQLはRubyで作られたライブラリですが、最新のMySQLに対
応していないなど、MySQL/Rubyと比較して機能不足が目立ちます。
MySQL/Rubyは、RubyGemsを使ってインストールするのが一般的です。
あらかじめRubyGemsをインストール後、以下のコマンドでMySQL/Ruby
をインストールできます。


# gem install --remote mysql


2012年8月12日日曜日

4.2 MySQLの設定(2)

4.2.3 データベースユーザーパスワードの変更


データベースユーザーのパスワードは、SET PASSWORDコマンドを使って
変更できます。

SET PASSWORD FOR ユーザー名@ホスト名=password('新しいパスワード');

次の例では、student@localhostユーザーのパスワードを「newpass」に変更しています。

mysql> SET PASSWORD FOR student@localhost=password('newpass');


4.2.4 データベースユーザーの削除

データベースユーザーを削除するには、DROP USERコマンドを使います。
DROP USER ユーザー名@ホスト名;
次の例では、student@localhostユーザーを削除しています。
mysql> DROP USER student@localhost

なお、MySQL 5.0.2未満では、DROP USERコマンドを実行する前に、
REVOKEコマンドを使ってユーザーの権限を無効化する必要があります。
次の例では、testdbデータベースですべての権限が与えられているstudent
ユーザーの権限を無効化しています。

mysql> REVOKE ALL ON testdb.* from 'student'@'localhost';







2012年8月10日金曜日

4.2 MySQLの設定


MySQLに接続して利用するには、あらかじめデータベースユーザ
ーを作成しておく必要があります。デフォルトでは、管理者権限を
持つrootユーザーが用意されています。

4.2.1 新規データベースユーザーの作成

MySQLをインストールした直後の状態では、データベースユーザーはroot
ユーザーのみが登録されています。このrootユーザーは、システムアカウン
トのrootユーザーとは関係ないので注意してください。一般的に、MySQL
を利用する場合は、専用のユーザーを作成して利用します。管理者権限のあ
るrootユーザーを利用し続けることは、セキュリティ上好ましくないからで
す。

ユーザーの作成は、以下の書式で行います。

CREATE USER 'ユーザー名'@'ホスト名' IDENTIFIED BY 'パ
スワード';

次の例では、studentという名前のユーザーを作成しています。パスワード
は「himitu」を指定しています。

mysql> CREATE USER 'student'@'localhost'
IDENTIFIED BY 'himitu';

ただし、CREATE USERコマンドで作成されたユーザーには権限が設定され
ていないので、別途権限を設定する必要があります。そのため、GRANTコ
マンドを使って、ユーザーの作成と権限の設定を同時に行うのが一般的です。

GRANT 権限ON データベース名.テーブル名TO 'ユーザー名'@'ホ
スト名' IDENTIFIED BY 'パスワード';

次の例では、testdbデータベースのすべてのテーブルに対し、すべての権限
を与えてstudentユーザーを作成します。

mysql> GRANT ALL ON testdb.* TO 'student'@
'localhost' IDENTIFIED BY 'himitu';

データベースを指定しない場合は、ワイルドカード「*」を使ってください。
次の例では、すべてのデータベースに対して、SELECTコマンドとUPDATE
コマンドが利用できるユーザーstudentを作成します。

mysql> GRANT SELECT,UPDATE ON *.* TO 'student'@
'localhost' IDENTIFIED BY 'himitu';


なお、他のホストからネットワーク経由で利用したい場合は、ホスト名欄に
「%」を指定してください。

mysql> GRANT ALL ON testdb.* TO 'student'@'%'
IDENTIFIED BY 'himitu';

この場合、localhostからは接続できなくなるので、student@localhostでの
設定も別途必要です。

4.2.2 データベースユーザーへの権限設定


GRANTコマンドは、データベースユーザーの権限を設定するコマンドです。

GRANT 権限ON データベース名.テーブル名TO ユーザー名@ホスト名[IDENTIFIED BY 'パスワード'];

※ユーザーが存在しないと、そのユーザーを作成します。


権限には、表に示すような権限を指定することができます。

mysql> CREATE USER 'student'@'localhost'
IDENTIFIED BY 'himitu';



















2012年8月9日木曜日

4.1 データベースの作成と削除

MySQLでは複数のデータベースを同時に管理することができます。

4.1.1 データベースの作成


データベースを作成するには、SQLコマンドのCREATE DATABASEを使い
ます。
CREATE DATABASE データベース名;
次の例では、testdbという名前のデータベースを作成しています。
mysql> CREATE DATABASE testdb;

なお、データベースで日本語を扱う際には、キャラクタセットを指定してデ
ータベースを作成します。日本語のキャラクタセットには、utf8(UTF-8)、
eucjpms(EUC-JP)、cp932(シフトJIS)が指定できます。たとえば、キ
ャラクタセットをシフトJISにしてデータベースtestdbを作成するには、次
のように指定します。

mysql> CREATE DATABASE testdb CHARACTER SET
cp932;
なお、デフォルトのキャラクタセットはLatin-1です。

4.1.3 データベースの削除


作成済みのデータベースを削除するには、S Q L コマンドのD R O P
DATABASEを使います。
DROP DATABASE データベース名;
次の例では、testdbデータベースを削除しています。
mysql> DROP DATABASE testdb;

データベースを削除できるのは、削除できる権限を持っているユーザーだ
けです。削除時には確認メッセージもなく、ただちにデータベースは削除
されてしまいますので、誤って別のデータベースを削除してしまわないよ
う注意してください。



2012年8月7日火曜日

3.2 MySQLの基本操作(2)

3.2.2 MySQLクライアント

MySQLサーバに接続してコマンドラインで操作をするには、MySQLクライ
アントコマンドを使います。MySQLクライアントコマンドはmysqlコマン
ドによって起動します。
# mysql -u root -p
Enter password:
-uオプションの引数には接続するユーザー名を指定します。-pオプションを
指定すると、対話的にパスワードを尋ねられます。パスワードを正しく入
力すると、プロンプトが「mysql>」に変わります。
※-pオプションの直後にパスワードを指定することもできますが、
コマンド履歴に残ってしまうので、対話的に入力した方がよいでしょう。

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or ¥g.
Your MySQL connection id is 2
Server version: 5.0.45 Source distribution
Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.
mysql>
プロンプト「mysql>」に続けて、mysqlコマンド用のコマンドを実行でき
ます。また、任意のSQLコマンドを実行したり、MySQL独自のSQLコマン
ドを実行することもできます。主なコマンドを表3-2にまとめます。

主なmysqlコマンド


  • \?、\h MySQLクライアントコマンドのコマンドを一覧を表示する
  • \q MySQLクライアントコマンドを終了する
  • \s MySQLサーバのステータスを表示する
  • \C 文字コード文字コードを変更する
  • USE データベース名; 指定したデータベースに接続する
  • SHOW DATABASES; データベース一覧を表示する
  • SHOW TABLES; テーブル一覧を表示する
  • DESCRIBE テーブル名; テーブルの定義内容を表示する


MySQLクライアント用のコマンドは、「\」+1文字のアルファベットで指
定されます。たとえば、MySQLモニタを終了するには「\q」を入力します。


mysql> \q
Bye

実は、「\q」は「quit」コマンドの省略形です。次のように、quitコマンド
を指定することもできます。その場合は、行末に「;」を付けてください。

mysql> quit;
Bye

すべてのMySQLクライアントコマンドは「\h」もしくは「\?」を実行する
と表示されます。また「help;」と入力しても同じです。

mysql> \h
For information about MySQL products and services, visit:
http://www.mysql.com/
For developer information, including the MySQL Reference Manual,
visit:
http://dev.mysql.com/
To buy MySQL Network Support, training, or other products, visit:
https://shop.mysql.com/
List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
? (\?) Synonym for `help'.
clear (\c) Clear command.
connect (\r) Reconnect to the server. Optional arguments are db
and host.
delimiter (\d) Set statement delimiter. NOTE: Takes the rest of
the line as new delimiter.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to mysql server, display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
help (\h)Display this help.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to _ pager]. Print the query results via
PAGER.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file. Takes a file name as an
argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to _ outfile]. Append everything into
given outfile.
use (\u) Use another database. Takes database name as argument.
charset (\C) Switch to another charset. Might be needed for
processing binlog with multi-byte charsets.
warnings (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
For server side help, type 'help contents'

3.2.3 データベースへの接続


MySQLサーバは、複数のデータベースを同時に扱うことができます。どの
ようなデータベースが存在するのかは、MySQLモニタ上で次のようにして
確認することができます。

mysql> SHOW DATABASES;
+------------------------+
| Database |
+------------------------+
| information _ schema |
| mysql |
| test |
+------------------------+
3 rows in set (0.01 sec)

「SHOW DATABASESコマンド」というMySQLコマンドを実行すると、結
果が表示されます。「information_schema」と「mysql」は、MySQLが内
部的に利用するデータベースです。「test」はデフォルトで用意されている
テスト用のデータベースです。

MySQLクライアントを起動した状態では、どのデータベースにも接続して
いません。データベースへ接続するには、USEコマンドを使います。次の
例では、testデータベースに接続しています。




mysql> USE test;
Database changed

現在使用中のデータベースを知るには、SELECT DATABASEコマンドを実
行します。

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| test |
+------------+
1 row in set (0.01 sec)




もし、どのデータベースにも接続していないのであれば、次のように表示
されます。

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)


「NULL」というデータベースに接続しているわけではないので注意してく
ださい。







2012年8月6日月曜日

3.2 MySQLの基本操作


MySQLサーバに対する操作には、コマンドラインで行うものと
GUIで行うものがあります。ここではコマンドラインによる操作を
取り上げます。

3.2.1 MySQLサーバの起動と終了

MySQLサーバを起動するには、起動スクリプトを使います。

# /etc/init.d/mysqld start
Starting MySQL: [ OK ]

デフォルトでは、MySQLサーバの管理者ユーザーにはパスワードが設定さ
れていないため、初回起動時には警告メッセージが表示されます。MySQL
の管理コマンドであるmysqladminコマンドを使って、パスワードを設定し
ておきましょう。「new-password」の部分は、任意のパスワードに置き換
えてください。
# mysqladmin -u root password 'new-password'

このrootユーザーは、システムのrootユーザーとは別ですので注意してくだ
さい。
MySQLサーバは3306番ポートを利用します。netstatコマンドを実行して、
3306番ポートが開かれているか確認できます。

# netstat -atn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN

MySQLサーバの動作は、mysqladminコマンドを使っても確認することが
できます。パスワードには、先ほど設定したパスワードを入力します。

# mysqladmin -u root -p ping
Enter password:
mysqld is alive

「mysqld is alive」と表示されれば、MySQLサーバは稼働しています。
MySQLサーバが稼働していない場合は、次のようなエラーメッセージが表
示されます。

# mysqladmin -u root -p ping
Enter password:
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/
lib/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/var/lib/mysql/
mysql.sock' exists!


起動スクリプトを使ってMySQLサーバの稼働状態を調べることもできます。
MySQLサーバが起動しているときは、PID(プロセスID)番号と「running...」
の文字が表示されます。

# service mysqld status
mysqld (pid 12116) is running...

MySQLサーバを停止するには、次のコマンドを実行します。

# /etc/init.d/mysqld stop
Stopping MySQL: [ OK ]


また、設定変更をするなどしてMySQLサーバの再起動が必要な場合は、次
のコマンドを実行します。

# /etc/init.d/mysqld restart
Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]