RubyからMySQLを使う@Windows XP

Windows XPにMySQLを入れてみる。そしてRubyから呼び出してみる。 - 歩くパンケーキたちの続き。
まず、環境を書いておく。Windows XPruby 1.8.6 (all-in-one-rubyで入れた)、gem 0.9.4、MySQL 5.0.67 for Win32、dbi 0.4.1(dbd-mysql 0.4.2)、mysql-ruby 2.7.3。
MySQLのバージョンは前回の記事の通り最新のから1つ下げています。以下はたぶん超基本的内容です。

まず、MySQLのパスが通っていなかったので通す。

Windows XP のパスの確認・通し方

なんかいつもパスを通すときにどこでプロパティを見るのか忘れるのでメモ。

dbi経由ではデータベースやテーブルが作れないのでMySQLから作る。
ちなみに

Rubyで作るデータベースCGI (1/3):快速MySQLでデータベースアプリ!(7) - @IT

ではcreateが動いていますが、これはバージョンが古いからみたい。

Ruby DBI モジュールを使う

によると、

あなたの使用しているMySQLクライアントライブラリのバージョンが MySQL 4 以上の場合、createdbとdropdbが使用できないことに注意してください。これらのメソッドは MySQL 4 より Ruby MySQL モジュールで使用してはいけない関数(deprecated functions)となっています。

らしいので、使えません。データベースとテーブルは予めMySQLで作っておく必要があります。

データベースとテーブルの作り方は以下を参照。

Step1・データベースとテーブルの作成: MySQL初心者入門講座

やることは一通り書いてあるんだけど、いまいち操作の詳しい説明がないので、一応今回やった処理を注釈こみで書いておく。忘れたときのために半分自分用。
まず、MySQLに接続。

mysql -u root -p

パスワードを聞かれるので入力。rootのところはユーザー名です。mysql>に入る。
現在あるデータベースを確認するのは以下。

show databases;

初期状態ではimformation_schemaとmysqlとtestがある。行末のセミコロンがないと動かないので忘れない。Windows環境では大文字小文字は関係ないみたいです。
次に、新しいデータベースを作る。

create database test2;

これでtest2データベースができる。show databasesで確認できる。
次に使うデータベースに移動する。

use test2

Database changedと出て移動完了。これはセミコロンいらない。
このデータベース内のテーブルを確認する。

show tables;

今はまだ空なのでEmpty setと出る。
新しいテーブルを作る。

create table sites(SITE_ID BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT); 

適当に改行を挟んでも良い。siteがテーブルの名前、SITE_IDがフィールドの名前。イメージとしてはWEBサイトのURLなどを保存するテーブルを作ろうとしている。括弧内がオプション。型だけは必須。型やオプションについては以下のページが分かりやすかった。

http://noongoro.main.jp/note/note0065.html

ただし、符号なしを表すUNSIGNEDは型の直後に書かないとエラーになる。
PRIMARY KEYはテーブルの基準となる無二になるフィールドを表す。IDにすると分かりやすそう。AUTO_INCREMENTによって1つずつ増えるようにしている。
作ったテーブルの設定の詳細を見るには以下のコマンド。

desc sites;

表示内容については型とオプションを見れば大体分かる。
なお、createするときは、,を挟むことで複数のフィールドを同時に作れる。
あとから追加する場合は以下のように入力。

alter table sites ADD MODIFIED_TIME TIMESTAMP;

alter tableはテーブルの構造を変更するコマンドであり、詳しくは以下。

http://dev.mysql.com/doc/refman/4.1/ja/alter-table.html

sitesが変更するテーブル名。ADDによってフィールドを加えることを示している。MODIFIED_TIMEが新しいフィールドの名前。TIMESTAMPは型の一種で日付時間などが入る(予定)。
あとはもう一個フィールドとしてURLを追加。

alter table sites ADD SITE_URL TEXT;

これで、なんとなくテーブルができた感じ。descで見ると、

+---------------+---------------------+------+-----+-------------------+----------------+
| Field         | Type                | Null | Key | Default           | Extra          |
+---------------+---------------------+------+-----+-------------------+----------------+
| SITE_ID       | bigint(20) unsigned | NO   | PRI | NULL              | auto_increment |
| SITE_URI      | text                | YES  |     | NULL              |                |
| MODIFIED_TIME | timestamp           | NO   |     | CURRENT_TIMESTAMP |                |
+---------------+---------------------+------+-----+-------------------+----------------+

良さそう。
実際の値の入力とかはrubyから行う。それについてはあとで追加します…眠いので…。

MySQLについては公式のリファレンスマニュアルといっぱいブックマークされているリファレンスマニュアルが網羅的で分かりやすそうです。そこでもう少し勉強する予定。