Perl For UNIX/Linux
 
TryThe Homepage
初めてのCGI
CGI 研究室
ダイナミックCGI
ダウンロード
サービス
サーバ構築(Windows)
データベースアクセス
有料サービス
FAQ
お問い合わせ
このページを印刷
MySQL(UNIX/Linux)
  MySQL のインストール
現在ではほとんどのLinuxディストリビューションで標準装備になっています。
TurboLinux Serverでは自動的にインストールされ、Redhat8以降ではインストール時の オプションを選択するだけでインストールされます。 それ以外の、UNIXでインストールされていない場合は、 日本語ミラーサイト に詳しいインストール方法があります。こちらを参考にしてインストールしてください。
最新版のダウンロードは、 http://dev.mysql.com/downloads/ のミラーサイトになります。
【郵便番号検索サンプル】
ご住所
この例では、7桁の郵便番号を指定して122,000件の中から住所を0.37秒で検索しています。
完全一致ならDBMでも0.78秒でしたから問題なく実用範囲ですが、曖昧(5桁指定)では圧倒的にMySQLが高速です。
※インターネットでは通信時間が必要ですので実際の速度と異なります。
※本検索エンジンは「サービス」で利用法をご紹介しています。(もちろん無料)
  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の圧倒的なパワーは間違いありません。
Copyright 2004 Terra. All rights reserved. No reproduction or republication without written