1月16日 前回の復習からMySQLの勉強をはじめる。show databasesコマンドで,データベースの一覧を表示させ,use データベース名でデータベースを選択する。show tablesコマンドで作成済みのテーブルの一覧を確認する。explain テーブル名でテーブルの構造を表示させ,select * from テーブル名でレコードを全件表示する。
とんとんと進むかと思っていたが,こうしろうはexplainコマンドを忘れていた。それどころか自分で作ったデータベース名も忘れていた。週一回1,2時間やるだけではプログラミングもデータベースも「なかなか身につかんもんやな」と思ったが,それでも続けていればなんとかなると忘れたところを説明する。
前回,「MS-DOS ベースまたは 16 ビット Windows ベースのプログラムをWindows XP ベースのコンピュータ上で起動またはインストールしようとした場合のエラー」に悩まされたこうしろう,今回はどうなることか。
テーブルをMySQLコマンドで一行ずつ入力して作成するのは大変なので,テキストファイルにテーブルを作成するSQL文をあらかじめ作っておき,それをMySQLに読み込ませる方法を説明する。
---------------------------------------------------------- -- DBの選択 use rensyu; ----------------------------- -- test_tableの作成 ----------------------------- drop table if exists test_table; create table test_table ( id int unsigned auto_increment primary key, name varchar(20) not null ) TYPE=MyISAM; insert into test_table(name) values('Ken'); insert into test_table(name) values('Lucy'); ----------------------------------------------------------テキストエディタで,SQL文を記述し,test.sqlと名前で保存する。sqlという拡張子にソフトウエア的意味があるわけではなく,SQL文を記述してあることが人間にわかるようにsqlという拡張子を使っている。
多くのSQLデータベースでは,--(ハイフン2個)以降をコメントとしてあつかう。use rensyuで使用するデータベースを選択する。create table test_tableで,テーブルを作成する前にdrop table文でテーブルがすでに存在している場合に削除する。テーブル名の前に記述したif existsがテーブルの存在を確認し,存在する場合にのみdrop table文を実行する。
create tableには,test_tableとテーブル名を指定し,かっこの中に各フィールドの名称と属性を順に指定していく,フィールド数が多ければ,多いほど対話的に入力するのは面倒であり,テキストファイルにあらかじめSQL文を作っておくメリットがでる。
idフィールドは符号なし整数型(int unsigned )で自動的に増加(auto_increment)していく主キー(primary key)フィールドである。nameは可変長の文字列(varchar)でNULLを許さない(not null)。
「varcharとcharの違いがわかるか?」と中学の時に,基本情報技術者試験のためにSQLを勉強した記憶が残っているか尋ねてみた。「エリアを全部使うか,使わないか」のような答えをした。なんとなく残っているようだ。すっきりクリアされていなくて良かった。同じことを何度か勉強していくくなかで「なんとなく,ぼんやりしていること」が明確になっていくのだろう。
char型は固定長なのでchar(20)と宣言すれば,実データの長さに関係なく20バイトの領域を必ず占有するが,varchar型は実際に必要なエリアしか使用しない。
次のTYPE= TYPE=MyISAMはデータの保存形式の指定である。ここがMySQLの特徴的なところである。MySQLでは複数の保存形式を選択することができる。MyISAMは標準の形式で,トランザクション処理を使いたい時は,InnoDBを指定する。
二行のinsert文はレコードを追加する。into句につづけてテーブルを指定し(into test_table)(name)とかっこの中にフィールドを指定する。values句以降に指定した値がフィールドに代入される。idフィールドはauto_incrementなので省略しているのだ。
データベースのバックアップを取るには,mysqldumpコマンドを使う。
rensyuデータベースをファイルdump001にダンプするコマンドは上記のようになる。データベース名のあとにテーブル名を指定して,特定のテーブルだけをバックアップすることもできる。
バックアップファイル(dump001)の内容は次のようなSQL文である。このSQL文をMySQLに読み込ませることでデータベースの復元が可能だ。テキストファイルなので簡単に編集できるところが便利だ。
---------------------------------------------------------- -- MySQL dump 9.11 -- -- Host: localhost Database: rensyu -- ------------------------------------------------------ -- Server version4.0.20a-nt -- -- Table structure for table `test_table` -- CREATE TABLE test_table ( id int(10) unsigned NOT NULL auto_increment, name varchar(20) NOT NULL default '', PRIMARY KEY (id) ) TYPE=MyISAM; -- -- Dumping data for table `test_table` -- INSERT INTO test_table VALUES (1,'Ken'); INSERT INTO test_table VALUES (2,'Lucy'); ----------------------------------------------------------ここまでは,時折「ビー」とエラー音が聞こえてくることはあっても,大きな問題は発生していなかった。
次に,ブラウザでMySQL データベースを管理するためのソフトウエアphpMyAdminをインストールするところで,こうしろうはまたしても,はまってしまうことになった。
phpMyAdmin はhttp://www.phpmyadmin.net/home_page/index.phpのサイトからDownloadのリンクをたどりダウンロードすることができる。Windowsの標準的なファイル圧縮形式であるphpMyAdmin-2.6.0-pl3.zipをミラーサイトである北陸先端科学技術大学院大学のサーバーからダウンロードした。この長く,いかにも難しいことを勉強しそうな大学院大学は富山県のお隣石川県にある。
このツールを使うとテーブルやレコードの操作や,データベースのバックアップなどが簡単に行える。インストールも簡単で,圧縮ファイルを解凍して,できたディレクトリ名をphpMyAdminのような簡単な名前にリネームしてApacheのドキュメントルート以下に置けばよいのである。
そしてconfig.inc.phpの$cfg['PmaAbsoluteUri']に,たとえば,localhostの場合,
$cfg['PmaAbsoluteUri'] = 'http://localhost/phpMyAdmi
とphpMyAdminの完全なパスを指定し,MySQLのユーザー名やパスワードを指定すれば使用可能になる。
もちろん,実際のサーバーにインストールするときは,セキュリティに気を使わなければならないが,自分専用のWindowsノートPCにインストールするだけなら,特に考えることはない。
こうしろうのPCでは「扱えない拡張子のファイルです・・・」というエラーが出た。「なに,拡張子.phpが扱えないなら,Apacheの設定ファイルだ」「ちがう,問題ない。じゃ,php.iniがどうかなったか?」「php5ts.dllやlibmysql.dllは存在するか?」などとすったもんだした。
php.iniのextension_dirがc:/php/ext/と設定されており,そこにはちゃんとphp_mysql.dllがあったが,php.iniの中でextension=php_mysql.dllが; extension=php_mysql.dllと先頭にセミコロンが付いてコメントになっていた。セミコロンを削除し,Apacheを再起動する。これで直るだろうと,たかをくくっていたが,そうは問屋が卸さなかった。
ここで夕食をはさんだ。こうしろうのMindStorms日記を始めたとき,こうしろうは小学5年生,次男かずは2年生,この5年で大きく変わったのは,彼らのごはん茶碗である。こうしろうのそれは,私の茶碗の1.5倍くらいの大きさでちょうど居酒屋でお茶漬けを頼んだときにでてくるようなやつだ。かずのはそれより一回り大きく,どんぶりの一歩手前である。
こんな茶碗でわしわしとめしを食う。
こうしろうがネットで「Windowsの場合,extension_dirがc:/php/ext/だと上手くいかないことがあります。c:\php\ext\にしましょう」という解説を見つけ,extension_dir = "c:\php\ext\"と書き直すと実行できるようになった。しかし,父はもうひとつ納得がいかなかった。