先日、秋葉原の某書店で「データベースって難しいんだよね…」とこぼしている年配の方を見かけました。本業ではExcelで十分なのであまり気にしたことはなかったのですが、調べてみると確かにいろいろと難しそうです。

MythTVなどを試したときにMySQLの設定をやったことがありますが、必要最小限の範囲でしか使っていません。そこで、改めてデータベースの使い方を調べ、いろいろ試してみましたので、まとめておこうと思います。

mysql-base-successOpenOffice.org BaseをMySQLサーバに接続したところ。昨日まで、文字化けが解消できずに苦戦していました。

そもそもデータベースって何でしょう?

データベースとは

さまざまな情報を整理する際、短い文でまとめてメモに残したり、ExcelやCalcなどの表計算ソフトで一覧表にしたり、日記に書いたり…などと、いろいろな方法があります。一般的には、このような情報を項目ごとに整理してまとめて蓄積したものをデータベースと呼びます。通常、Accessなどのデータベース管理ソフトで使われるデータベースという言葉も同じ意味で、ただ管理システムで使われるため、特定の方法でデジタル化されているだけです。

データベースはあくまでデータの入れ物にすぎず、実際にデータを出し入れするのは、データベース管理システム(DBMS)の役割で、オープンソースの無償で使えるDBMSとしては、MySQLPostgreSQLSQLiteなどがあります。いずれも、サーバ・クライアント方式で稼働します。SQLiteは簡易版ですが、MySQLとPostgreSQLは機能も豊富で互角な感じです。

DBMSは汎用的な手段を提供するソフトですが、OpenOffice.orgのBase、Calc、Writerなどのデータベース連携アプリケーションと併用すれば、より簡単に利用することが可能になります。また、多くのサイトでも、データベース管理システムを利用しています。身近な例で言えば、Google検索でも利用されていますよね。

まずはじめに、MySQLのインストール方法と基本的な使い方をまとめてみましょう。

MySQLのインストール

Fedoraでも使えますが、今回はUbuntu 10.04を使いました。apt-getでもインストールできますが、root(MySQLの管理者ユーザ)のパスワード設定画面がGUIで表示されるため、ソフトウェア・センターかSynapticパッケージマネージャを使った方がわかりやすいでしょう。

ソフトウェア・センターからインストール
検索窓に「mysql」と入力して「MySQLサーバ」を探し、インストールボタンをクリックします。
Synapticからインストール
検索窓に「mysql-server」と入力して「mysql-server」というパッケージを探し、インストールします。

mysql-1インストールの途中で、rootパスワードの設定画面が表示されますので、任意のパスワードを設定します。ちなみに、OSのrootユーザとMySQLのrootユーザは全くの別物です。


MySQLサーバの設定

mysql-serverをインストールすれば、MySQLサーバはすでに稼働していますので、特に設定する必要はありませんが、文字化け対策だけやっておきましょう。

MySQLサーバの設定ファイルは、/etc/mysql/my.cnfというファイルです。このファイル内の[client][mysqld]のブロックの中に、それぞれ下記の1行を加えます。

default-character-set = utf8

[2012.03.30 追記]
新しいバージョンでは、サーバー側の[mysqld]では、「character-set-server=utf8」を使用する必要があるようです。


設定変更はとりあえずこれだけです。続いて、次のコマンドでMySQLサーバを再起動します。

$ sudo service mysql restart

なお、ユーザの追加など詳細なサーバ設定についてはMySQL Administratorという便利なツールがあります。

MySQLへのログイン

MySQLでは、基本的にはmysqlクライアントというコマンドラインツールを使って端末上で操作します。

mysqlクライアントを起動するには、MySQLのrootユーザでインストール時に設定したパスワードを使ってログインします。

$ mysql -u root -p

というコマンドを実行すると、次のように表示されます。

Enter password:

ここで、パスワードを入力した後、Enterキーを押して、下記のように表示されればログインに成功です。

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 66
Server version: 5.1.41-3ubuntu12.6 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>


データベースの作成

まず、下記のコマンドを実行してみて下さい。

mysql> SHOW DATABASES;

information_schema、mysql、testというデータベースがすでに登録されているはずです。ここでは、これらのサンプルは使わず、新たにテスト用としてdata1というデータベースを作成します。CREATE DATABASE data1;だけでもいいのですが、後でOpenOffice.orgと連携させる際の文字化け対策の1つとしてクライアントの文字コードをutf8に設定しておきます。

mysql> CREATE DATABASE data1 DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

ここでもう一度、SHOW DATABASES;を実行すると、data1というデータベースが加わっていることを確認できます。

テーブルの作成

作成したデータベースは、まだ空のままです。実際に、表形式のデータを登録するには「テーブル」を作成しなければなりません。また、データを1件ずつ処理するのは現実的ではないので、別途、整数値と文字列のデータを記録したcsvファイル(文字コードはUTF8にしておく。ここではtest.csvとします)を用意して一括で登録することにします。

csvファイルは、/var/lib/mysql/以下にある各データベースの名前のついたフォルダに保存しておきます。この場合、/var/lib/mysql/data1です。以下、実行するコマンド(太字部分)とその意味をまとめておきます。

mysql> USE data1;
使用するデータベースを指定します。

mysql> CREATE TABLE table1 ( id int, name varchar(100) );
table1というテーブルを作成します。項目(フィールド)ごとに整数値か文字列かという指定をする必要があり、この場合は"idという整数値""nameという文字列"の2つの値から成るテーブルを作成しています。フィールドの名称つまりidやnameの部分は、日本語でも構いません。

mysql> SHOW TABLES;
テーブルのリストを表示します。新たに、table1というテーブルが加わっているはずです。USE data1;の実行前なら、SHOW TABLES FROM data1;という形でデータベース名を指定する必要があります。

mysql> LOAD DATA INFILE "test.csv" INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '"';
項目ごとに「,」で区切られて各データが「"」で挟まれたcsvファイル(test.csv)を読み込みます。次のような表示が出れば成功です。

Query OK, 10 rows affected (0.00 sec)
Records: 10 Deleted: 0 Skipped: 0 Warnings: 0


mysql> SELECT * FROM table1;
テーブルの中身を端末内に表示します。

mysql-2こんな感じです。文字コードが適切でないと、レイアウトが崩れます。

テーブルの削除

以下のコマンドで、データの削除ができます。

● テーブル内のデータだけを削除するには…
mysql> DELETE FROM table1;

ただし、テーブル内のすべてのレコード(記録)を消去するには、
mysql> TRUNCATE TABLE table1;
とした方が高速です。

● テーブルそのものを削除するには…
mysql> DROP TABLE table1;

SQL命令について

DBMSのクライアントでは、上のように、独特のコマンドを使います。これらはSQL命令とかSQL文などと呼ばれる専用の言語です。SQL命令は、必ず文末に「;」を付けることになっています(付けないと入力待ち状態になる)。また、SQL命令の予約語(SELECTなど)は大文字と小文字を区別する必要はありません。ですが、データベース名やテーブル名に小文字を使うことが多いため、予約語は大文字で表記した方が読みやすくなります。

なお、MySQLクライアントを終了するには、「quit」あるいは「exit」で終了できます。この場合、文末の「;」は不要です。

長くなってしまうので、続きは次回にしましょう。