連載
» 2001年01月31日 00時00分 公開

快速MySQLでデータベースアプリ!(2):mysqlコマンドでデータベース操作 (2/2)

[鶴長鎮一,MySQLユーザ会]
前のページへ 1|2       

コマンドによるデータベースの操作

テーブルの作成

 いつまでも空のデータベースでは話が進みません。テーブルを作ってみましょう。下記のようなテーブルを用意します。

フィールド  |   データ型
-------------------------
id          |   int
memo        |   char(240)
テーブル名 test_table

 mysqlコマンドを利用し“test”データベースの中に“test_table”テーブルを作ってみましょう。まだ先ほどの状態から何もしていなければ“mysql> ”プロンプトのままのはずです。そこで次のように入力します

mysql> create table test_table (
-> id int(10),
-> memo char(240)
-> );

 見やすいようにスペースと改行を入れていますが、なくても構いません。大事なのはフィールドの間に“,”を、文の最後に“;”を入れることです。

 完了したところで、テーブルが正しく作成されているか確認してみましょう。

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test_table     |
+----------------+
1 row in set (0.00 sec)

と返ってくれば成功しています。また、フィールドが正しく作成されているかも確認してみましょう。

(画像をクリックすると拡大表示します) (画像をクリックすると拡大表示します)

となっていれば成功です。“Field”、“Type”の意味はお分かりになると思います。create文を使った際に指定したフィールド名およびデータ型そのものです。その後はこうなっています

Null 空白(NULL)の挿入が可能どうか。“YES”なら空白の挿入が可能
Key データの抽出を速くするために使われる“index”(見出し)を作成する場合に設定されるキーの型
Default データ挿入時に何も指定されなかった場合に挿入するもの
Extra そのほかの説明
Privileges 実行可能な権限(権限については次回「ユーザー参照権について」で説明します)

「行」(データ)の挿入

 テーブルができたところで、実際にデータの挿入してみましょう。

mysql> insert into test_table values (1,'1st');

もちろん、

mysql> insert into test_table (id,memo) values (2,'2nd');

のような入力も可能です。いくつか挿入しておきましょう。

 成功すれば

Query OK, 1 row affected (0.00 sec)

と返ってきます。文法に誤りがあった場合(valuesの綴りを間違えてみます)は、

mysql> insert into test_table (id,memo) vales (2,'2nd');
ERROR 1064: You have an error in your SQL syntax near 'vales (2,'2nd')' at line 1

と文法の誤りを指摘してくれるので、もう一度入力し直してみましょう。

データの抽出

 ちゃんとデータが挿入されているか、確認してみましょう。

mysql> select * from test_table;
+------+------+
| id   | memo |
+------+------+
|    1 | 1st  |
|    2 | 2nd  |
+------+------+
2 rows in set (0.10 sec)

注:該当件数とデータの中身は、入力したものによってまちまちです

 条件付きでデータの抽出を行いたい場合は

mysql> select * from test_table where id = '2';
+------+------+
| id   | memo |
+------+------+
|    2 | 2nd  |
+------+------+
1 row in set (0.08 sec)

とします。今回の例では数個のデータしか存在しないため、条件を付けずに全てを選択してもストレスなく表示されます。ですが、実用的なデータベースになればなるほど、蓄えられているデータは膨大になります。そんな場合は、表示件数を調整します。

mysql> select * from test_table limit 0,1;
+------+------+
| id   | memo |
+------+------+
|    1 | 1st  |
+------+------+
1 row in set (0.00 sec)

limit [表示オフセット] [表示数]

のように使用します。例えば、100番目から20個だけ表示させたい場合は、

mysql> select * from XXXテーブル limit 99,20;

となります。最初のデータを“0”から数えることをお忘れなく。

補足とデータベースの終了

 データを更新する“update”、データを削除する“delete”、テーブルを削除する“drop”など、このあたりのコマンドはほかのSQLデータベースと同じように使えますので、特に説明は必要ないでしょう。ただし、前回の「機能とSQL互換性」で説明したように、MySQLは完全なANSI SQL92互換ではありません。もう1度おさらいすると下記のようなコマンドやオプションがサポートされていません。

  • -- は空白が続く場合だけコメントになる
  • VARCHARフィールドでは、値が格納されるときに末尾の空白が削除される。いくつかのケースで、CHARフィールドは暗黙のうちにVARCHARフィールドに変更される
  • テーブルを削除するときに、テーブルについての権限は自動的には破棄されない。テーブルについての権限を破棄するには、明示的にREVOKEを発行する必要がある
  • NULL AND FALSEはFALSEではなくNULLと評価される

 また機能そのものとして、

mysql> SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);

のような、“Sub-selects”や“SELECT INTO TABLE”もサポートされていません。

 “mysql>”プロンプトに続けてSQL文を入力してきた際にお気付きになられた方もいると思いますが、mysqlプロンプト内ではtcshライクに、カーソルキーによるヒストリ機能やカーソルの移動、[Tab]キーによる補完機能が使えます。

 試しに、[↑]キーまたは[Ctrl]+[P]を入力してみてください。キーを押せば押すほど、以前に入力したSQL文が表示されます。また、“sele”だけを入力して[Tab]キーを押せば、“select”と補完され、続けて[Tab]キーを押せば、入力可能なコマンドやテーブル名が表示されます。

 テーブル名とフィールド名以外は大文字でも小文字でも構いません。ここでは、共通して小文字を使用してきましたが、

mysql> SELCT * FROM test_table LIMIT 0,1;

のように大文字を使っても同じ結果が返ってきます。

 では最後に行儀よく、終了してみましょう。

mysql> quit;

 またはmysqlプロンプト以降何も入力されていないのを確認して、[Ctrl]+[D]をタイプしてください。

Bye

と表示されて終了できます(もちろんバックスラッシュコマンド“\q”でも終了できます)。

 以上で、mysqlコマンドの基本的な使い方はお分かりいただけたと思います。次回は、データベースの作成や削除など、より重要な操作を行うための“mysqladmin”コマンド、そしてユーザー参照権の設定について解説したいと思います。ご期待ください。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。