26.4. MySQLの基本操作

ここでは、MySQL でデータベースを作成し、テーブルにデータを追加するまでの手順を簡単な例をとおして解説します。新規データベースユーザーの登録やデータベースの作成等、MySQL に関する詳細な情報は、MySQL AB で公開されているドキュメントを参照してください。

26.4.1. データベースユーザーの作成

Turbolinux 11 Server では、初期状態では root ユーザーがデータベースの管理者となり、このユーザー以外の Linux ユーザーは、インストール直後の MySQL を使用することはできません。よって、Linux システムにアカウントを持つユーザーが MySQL を使用できるように、必要に応じてデータベースユーザーを登録する必要があります。

管理権限をもつデータベースユーザーを登録するためには、まずは root ユーザーでデータベースに接続後、次のように GRANT 文を実行します。admin_userには作成するユーザー名を、new_passにはユーザーのパスワードを入力します。リモートホストからの接続およびローカルホストからの接続を許可するには次のように 2 つの GRANT 文を実行する必要があります。他にユーザー管理用のシステムテーブルを直接変更する方法もありますが、GRANT 文が推奨されています。

mysql> GRANT ALL PRIVILEGES ON *.* TO admin_user@"%" 
          IDENTIFIED BY 'nwe_pass' WITH GRANT OPTION;

mysql> GRANT ALL PRIVILEGES ON *.* TO admin_user@"localhost" 
          IDENTIFIED BY 'nwe_pass' WITH GRANT OPTION; 

それぞれ実行後に次のように表示されれば成功です。

Query OK, 0 rows affected (0.00 sec)

データベースユーザーを作成するには CREATE USER 文を使用します。root ユーザーでデータベースに接続後、次のように実行します。例は taro ユーザーを作成しています。@"% はすべてのホストを表します。省略した場合にもすべてのホストに対する指定となります。

mysql> CREATE USER taro@"%";

ローカルホストからのアクセスも許可するにはさらに次を実行します。

mysql> CREATE USER taro@localhost;

すべてのデータベースに対して閲覧と更新( SELSECT、INSERT、UPDATE、DELETE)権限を付与するには次のように GRANT 文を実行します。

mysql> GRANT CREATE,SELECT,INSERT,UPDATE,DELETE ON *.*
      TO taro@localhost IDENTIFIED BY 'password';
mysql> GRANT CREATE,SELECT,INSERT,UPDATE,DELETE ON *.*
      TO taro@"%" IDENTIFIED BY 'password' ;

これで、作成したデータベースユーザーで、MySQL を利用できるようになります。

なお、登録したデータベースユーザーを削除するには、DROP USER 文で行います。

mysql> DROP USER taro@"%";
Query OK, 0 rows affected (0.00 sec)
mysql> DROP USER taro@localhost;
Query OK, 0 rows affected (0.00 sec)

26.4.2. データベースの作成

データベースを作成するには、CREATE DATABASE 文を実行します。データベースの CREATE 権限を持つユーザーだけが、データベースを作成できることに注意してください。root ユーザーでデータベースに接続後、以下のように実行してください。引数で作成するデータベース名(例は testdb)を指定します。また、データベースで日本語を扱うために使用する文字コードを指定することを推奨します。以下の例の“ujis”はデフォルトの文字コードが日本語 EUC のデータベースを作成しています。

CREATE DATABASE testdb CHARACTER SET ujis;

データベースを作成するとデータベース格納領域であるディレクトリ以下にデータベース名のディレクトリが作成され、db.opt ファイルが作成されます。このファイルにはデータベースに関する定義が格納されています。データベースの属性変更は、ALTER DATABASE 文で行えます。

これにより、testdb という日本語を EUC で管理するデータベースが作成されます。次に作成したデータベースへテーブルを作成し、データを挿入します。

26.4.3. mysql の基本操作

MySQL では、mysql というクライアントアプリケーション(データベース操作ツール)が標準で付属されています。作成したデータベースへ接続し、SQL文の実行とその結果を表示することが可能です。mysql の詳細な使用方法については、MySQL AB で公開されているドキュメントを参照してください。

作成した testdb データベースへ接続するには、次のコマンドを実行します。この例では、ローカルホストからデータベースユーザーである taro を使用して、testdb データベースに接続します。リモートホストから接続する場合はデータベースが存在するホストを -hhostname オプションで指定します。

$ mysql -utaro testdb

-u オプションを指定しない場合は、root ユーザーとしてデータベースへの接続を試みます。また、データベース名を指定しなかった場合は、test データベースへ接続を試みます。パスワードを設定している場合には “-ppassword”または“-p”オプションの指定が必要です。指定しないときエラーが表示されデータベースに接続できません。“-p” オプションのみを指定した場合、次のようにパスワード入力を要求されます。

Enter password:

注意

標準設定では、データベースユーザーのパスワードは設定されていません。しかし、実際の運用ではパスワードによるユーザー認証を行うことを推奨します。以下は taro ユーザーに対して password というパスワードを設定しています。

mysql> SET PASSWORD FOR 'taro'@'%' = 
          PASSWORD('password');
Query OK, 0 rows affected (0.00 sec)
mysql> SET PASSWORD FOR 'taro'@'localhost' = 
          PASSWORD('password');
Query OK, 0 rows affected (0.00 sec)

次回のデータベース接続は以下のように実行します。

$ mysql -utaro -ppassword testdb

接続すると以下のように、プロンプトが mysql> になります。これが、SQL 文を実行するためのコマンドプロンプトとなります。

$ mysql -utaro testdb -ppassword
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.0.45 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

SQL 文以外にも、mysql へ命令を与えることができます。先頭がバックスラッシュ \ の文は SQL 文ではなく、mysql に対する命令と解釈されます。例えば、\q は mysql を終了するための命令です。また、\h は、mysql へ与えることができる命令のヘルプを表示します。

mysqlを終了するには、次のコマンドを実行します。

mysql> \q

以下は、mysql で使用できる代表的なコマンドです。

表 26-2. psql 主なコマンド

コマンド説明
\hヘルプを表示します。
\rデータベースへ再接続します。\r db_name host と指定します。host にはホスト名を指定しますが、省略時はローカルホストとなります。
\GSQL 文に続けて \G を入力するとサーバーに渡され SQL が実行されます。実行結果は垂直方向に表示されます。
\gSQL 文に続けて \g を入力するとサーバーに渡され SQL が実行されます。“;”と同義です。
\qmysql を終了します。
\.他のファイルを取り込みます。一連のSQL文を、事前にファイルに記述しておき、\. filename と実行することで、一度に SQL文を実行することができます。
\s接続中のデータベースやユーザーなどをはじめ多くのサーバーに関する情報を表示します。
\!“\! ”に続けて Linux のシェルコマンドを入力し[Enter]キーを押すと実行します。
\Tすべての情報をファイルに出力します。\T filename と実行することで、カレントディレクトリの filename に実行コマンドや実行結果がすべて出力されます。
\u接続データベースを変更します。\u db_name と指定します。
help“help SQL”と実行して SQL の構文に関するヘルプを表示できます。

ティップ

help で表示したい SQL 構文のトピックスが不明な場合は、“help contents”と実行して Account Management や Administration などコンテンツのカテゴリを一覧表示することができます。さらに、ここで表示されたカテゴリからコンテンツ名を指定して“help contents_name”と実行して SQL 構文のトピックス名を確認できます。

26.4.3.1. テーブル作成とデータの追加

testdb データベースにデータを格納するためのテーブルを作成します。ここでは、例として以下の簡単なテーブルを作成します。テーブルの作成はデータベースに対する CREATE 権限のあるユーザーで実行します。

表 26-3. meibo テーブルの仕様

カラム名データ型説明
namevarchar(30)半角30文字までの可変長文字列
ageinteger整数
addressvarchar(80)半角80文字までの可変長文字列

meibo デーブルへ格納するデータは以下の通りです。

表 26-4. meibo テーブルのデータ

nameageaddress
Taro Yamada271-2-x Shibuya-ku Tokyo
Hanako Tanaka183-4-x Yokohama-shi Kanagawa
Ichiro Suzuki355-6-x Saitama-shi Saitama

テーブルの作成は SQLの CREATE TABLE 文を使用します。SQL 文は、最後はセミコロン ; で終了します。その間は改行しても構いません。


mysql> CREATE TABLE meibo (name varchar(30),
     -> age integer,
     -> address varchar(80));
Query OK, 0 rows affected (0.00 sec)age integer, address varchar(80));
mysql>

新規作成した meibo テーブルにデータを追加します。データの追加は SQL 文の INSERT INTO を使用します。

mysql> INSERT INTO meibo VALUES
    ->  ('Taro Yamada',27,'1-2-x Shibuya-ku Tokyo');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO meibo VALUES
    ->  ('Hanako Tanaka',18,'3-4-x Yokohama-shi Kanagawa');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO meibo VALUES
    -> ('Ichiro Suzuki',35,'5-6-x Saitama-shi Saitama');
Query OK, 1 row affected (0.00 sec)
mysql>

テーブルに追加したデータの表示は SQL の SELECT 文を使用します。

mysql> SELECT * from meibo;
+---------------+------+-----------------------------+
| name          | age  | address                     |
+---------------+------+-----------------------------+
| Taro Yamada   |   27 | 1-2-x Shibuya-ku Tokyo      |
| Hanako Tanaka |   18 | 3-4-x Yokohama-shi Kanagawa |
| Ichiro Suzuki |   35 | 5-6-x Saitama-shi Saitama   |
+---------------+------+-----------------------------+
3 rows in set (0.00 sec)

作成したテーブルを削除したい場合は、SQL 文の DROP TABLE を使用します。

mysql> DROP TABLE meibo;
Query OK, 0 rows affected (0.00 sec)

mysql> 

これで、meibo テーブルが削除されます。なお、当然のことながらテーブルに追加したデータも削除されます。