|
MySQL(UNIX/Linux) |
| MySQL のインストール |
 |
- 現在ではほとんどのLinuxディストリビューションで標準装備になっています。
TurboLinux Serverでは自動的にインストールされ、Redhat8以降ではインストール時の
オプションを選択するだけでインストールされます。
それ以外の、UNIXでインストールされていない場合は、
日本語ミラーサイト
に詳しいインストール方法があります。こちらを参考にしてインストールしてください。
最新版のダウンロードは、
http://dev.mysql.com/downloads/ のミラーサイトになります。
|
| Perlモジュール DBI、DBDのインストール |
 |
- 本コーナーの(UNIX/Linux)版のPerlモジュールのインストールは、すべてWebminから行う事を前提としています。
Webminをインストールされていない場合はこちらをご参照ください。
Webminのツールバー「その他」を押し、「Perlモジュール」を選択します。

既にインストール済みのモジュールの一覧が表示されますので、
この中に、DBI、DBDが存在しない場合はインストールが必要です。
- このページの最下部にあるフォーム「CPANから名前付き」テキストボックスに[DBI]と入力し、[インストール]ボタンを押します。
自動的にダウンロードが開始され、最新版のバージョン情報が表示されますので、
[インストール続行]ボタンを押してインストールしてください。
これだけでインストールは完了です。
|
| データベースの管理 |
 |
- Webminがインストールされていれば、新しいデータベースの作成からテーブルの作成、データの追加まで
すべてWebminで行えます。
Webminツールバーの「サーバ」から「MySQLデータベースサーバ」を選択します。
MySQLサーバの起動と停止もこちらで行えますので、起動していない場合は、
[MySQLサーバーを起動]ボタンを押して起動してください。

正常に起動されれば現在のデータベース一覧が表示されます。
デフォルトでは、MySQL自身を管理するデータベース「mysql」と「test」が作成されています。
ここでは、以下のサンプルで使用するデータベース「zip」を作成してみましょう。
- 「新規データベースを作成」を押します。

データベース名に郵便番号を管理しますので[zip]と指定し、[作成]ボタンを押します。
- データベースが作成されればテーブルを作成しますので、
作成された「zip」データベースをクリックし、[新規のテーブルを作成]ボタンを押します。
このボタンの右に有る数値は作成するテーブルのフィールド数を表しています。
この例ではデフォルトの「4」で結構です。
テーブル名には「iptable」と名付け、各フィールドは以下のように設定してください。
フィールド名 |
データの種類 |
種類の幅 |
Primary Key? |
インクリメント |
備考 |
id |
mediumint |
|
はい |
はい |
一意キー |
code |
varchar |
7 |
|
|
7桁郵便番号 |
pre |
smallint |
|
|
|
県番号 |
citys |
text |
|
|
|
市区町村地域 |
|
[作成]ボタンを押すとテーブルが作成されます。
- 今回はリレーションシップを学習する為、もう1つテーブルを作成します。
フィールド数に2を指定して、[新規のテーブルを作成]ボタンを押してください。
テーブル名を「pretable」にし、以下の設定で都道府県テーブルを作成します。
フィールド名 |
データの種類 |
種類の幅 |
Primary Key? |
インクリメント |
備考 |
pre |
smallint |
|
はい |
はい |
県番号 |
name |
varchar |
20 |
|
|
都道府県名 |
|
郵便番号用テーブルには都道府県番号しか登録されていませんが、
このテーブルとリレーションする事で、都道府県名を表示できます。
|
| MySQLへのアクセス |
 |
- それでは実際にPerlからMySQLにアクセスしてみましょう。
#!/usr/local/bin/perl
# DBIモジュールを読込む
use DBI;
# データベース名を設定
$database = "zip";
# ホスト名を設定
$hostname ="localhost";
# ユーザ名を設定
$user = "root";
# データベースにパスワードを設定していれば指定
$password = "********";
print "Content-type: text/html\n\n";
print "<html>"
print "<body>"
# データベースのオブジェクトを作成して接続
$dsn="DBI:mysql:database=$database:host=$hostname";
$dbh = DBI->connect($dsn,$user,$password);
# 高知県を郵便番号順に取得
# 取得したテーブルにリレーションで都道府県名を追加している
$rs = $dbh->prepare("SELECT iptable.*,pretable.name FROM iptable LEFT JOIN pretable ON iptable.pre=pretable.pre WHERE iptable.pre = 39 ORDER BY iptable.code;");
$rs->execute();
# 取得したレコードセットの数だけループして表示
while(@FIELD = $sql->fetchrow()) {
print "$FIELD[1] $FIELD[4]$FIELD[3]<br>\n";
}
# レコードセットを閉じる
$rs->Close();
# データベースを閉じる
$dbh->Close();
print "</body></html>";
exit;
|
|
それでは、SELECT文を見てみましょう。
SELECT iptable.*,pretable.name これは、テーブル「iptable」のすべてのフィールドと、
テーブル「pretable」の「name」フィールドを取得しなさいと言うことで、
FROM iptable LEFT JOIN pretable ON iptable.pre=pretable.pre
は、iptableのpreフィールドとpretableのpreフィールドの一致する物だけiptableに追加すると言うことになります。
この事で、iptableの都道府県番号がpretableの都道府県名に変換されレコードセットに追加されるのです。
WHERE iptable.pre = 39 は、iptableの都道府県番号39(高知県)を抽出
ORDER BY iptable.code は、郵便番号順に並び替えると言うことになります。
この例で使用した郵便番号データベース(122,000件)をMySQLで抽出するのにわずか0.31秒しかかかりません。
同じデータをテキストベースで抽出するとgrep関数を使用しても約3秒、ループを使えば10秒以上必要でした。
私のTurboLinuxサーバは一昔前PentiumU450MHz ですから決して早いマシーンではありません。
Webで使用すればこれだけの差は出ないにしてもMySQLの圧倒的なパワーは間違いありません。
|
|
|
|