図1●[MySQL Server Instance Configuration Wizard]の画面<BR>指示に従って選択していくだけで,メモリー,ディスクの割り当て量などが適切に設定される。
図1●[MySQL Server Instance Configuration Wizard]の画面<BR>指示に従って選択していくだけで,メモリー,ディスクの割り当て量などが適切に設定される。
[画像のクリックで拡大表示]
図2●MySQL Administratorのテーブル作成画面&lt;BR&gt;GUI画面でテーブルをデザインできる。主キーの設定やNULLの許可/不許可の設定も可能。
図2●MySQL Administratorのテーブル作成画面<BR>GUI画面でテーブルをデザインできる。主キーの設定やNULLの許可/不許可の設定も可能。
[画像のクリックで拡大表示]
図3●MySQL Query BrowserのSQL編集画面&lt;BR&gt;エディタ上にストアド・ファンクションのひな型が生成されるので,下線の部分を追加/変更するだけでよい。[Execute]ボタンを押すと,ストアド・ファンクションがデータベースに登録される。
図3●MySQL Query BrowserのSQL編集画面<BR>エディタ上にストアド・ファンクションのひな型が生成されるので,下線の部分を追加/変更するだけでよい。[Execute]ボタンを押すと,ストアド・ファンクションがデータベースに登録される。
[画像のクリックで拡大表示]
図4●図3のストアド・ファンクションをMySQL Query Browserで実行したところ&lt;BR&gt;画面上部のクエリー入力欄に表示されたSQL文のひな型を修正し,[Execute]ボタンを押す。
図4●図3のストアド・ファンクションをMySQL Query Browserで実行したところ<BR>画面上部のクエリー入力欄に表示されたSQL文のひな型を修正し,[Execute]ボタンを押す。
[画像のクリックで拡大表示]
図5●MySQLの制御構文やカーソルを使うストアド・プロシージャの例&lt;BR&gt;注文明細と商品マスターの2つのテーブルの情報から,指定された顧客が今月獲得したポイントを計算している。
図5●MySQLの制御構文やカーソルを使うストアド・プロシージャの例<BR>注文明細と商品マスターの2つのテーブルの情報から,指定された顧客が今月獲得したポイントを計算している。
[画像のクリックで拡大表示]
図6●MySQLを利用するASP.NETアプリケーションの実行画面&lt;BR&gt;Visual Studio .NET 2003で作成した。画面中央の表には問い合わせを発行した結果を,画面下部には図5のストアド・プロシージャを呼び出した結果を表示している。
図6●MySQLを利用するASP.NETアプリケーションの実行画面<BR>Visual Studio .NET 2003で作成した。画面中央の表には問い合わせを発行した結果を,画面下部には図5のストアド・プロシージャを呼び出した結果を表示している。
[画像のクリックで拡大表示]
図7●図5のストアド・プロシージャをMSDE/SQL Server 2000用に書き直したもの(一部省略)&lt;BR&gt;IFの後に“THEN”が不要であるなど,様々な違いがある。
図7●図5のストアド・プロシージャをMSDE/SQL Server 2000用に書き直したもの(一部省略)<BR>IFの後に“THEN”が不要であるなど,様々な違いがある。
[画像のクリックで拡大表示]
▼オープン・ソースのデータベース管理システムMySQLの新バージョン5.0がまもなく正式にリリースされる。
▼新版では,ストアド・プロシージャやトリガーなどの機能が追加され,市販データベース管理システムとの機能差が縮まっている。
▼ストアド・プロシージャの作成を通してGUIツールなども含めた使い勝手を検証した。

 MySQLは,スウェーデンMySQLが開発したオープン・ソースのリレーショナル・データベース管理システム(RDBMS)だ。同社によれば世界で600万台以上が稼働中で,実績は十分。国内でも,SIベンダー各社がWebアプリケーション開発言語PHPなどを使用してシステムを構築しているほか,サイボウズがグループウエア「サイボウズ ガルーン 2」にMySQLを組み込んで販売するといった例がある。ライセンスについては,GPL*のほかに有償のコマーシャル・ライセンスも用意する。MySQLを利用して開発したソフトのソース・コードをユーザーに配布したくない場合は,コマーシャル・ライセンスを購入すればよい。

 MySQLの特徴は,軽くて高速なこと。半面,市販RDBMSと比較して機能が少ないと指摘されることもあったが,バージョンアップを重ねるに従って差は縮まっている。例えばバージョン3.23.34ではトランザクションや外部キー制約が,4.1.0では副問い合わせが追加された。

 バージョン5.0での新機能の目玉は,「ストアド・プロシージャ/ファンクション」をサポートしたことだ。ストアド・プロシージャ/ファンクションは,複数のSQL文で構成される手続きをRDBMS側で実行する機能である。実行結果を戻り値として返すものをストアド・ファンクション,そうでないものをストアド・プロシージャと呼ぶ。

 ストアド・プロシージャ/ファンクションを利用すれば,複数の処理をRDBMS側で実行し,最終的な結果だけをクライアントに戻すことで,ネットワーク・トラフィックを削減できるようになる。加えて複雑な処理を手続きとしてまとめることにより,一部のテーブルの更新し忘れなどによるデータの不整合を防げる。

 このほか,MySQL 5.0では,(1)データベースに実際に存在するテーブルとは別に,クライアント側に提示する仮想的なテーブルを定義する「ビュー」,(2)データ更新時などに指定した処理を自動的に実行する「トリガー」,(3)検索結果を1行ずつ取り出してアクセスできる「カーソル」——といった機能を追加する。VARCHAR(可変長文字列)型に格納できる文字数を増やすなど,データ型のサポートも強化する予定だ。

 MySQL 5.0正式版のリリース時期は2005年夏とされていたが,記事を執筆した2005年8月時点ではまだ発表されていない。ここではベータ版のバージョン5.0.10を使用してストアド・プロシージャ/ファンクションを作成し,RDBMSの機能や管理ツールの使い勝手を検証した。

インストールと設定は簡単

 MySQLはWindowsインストーラを利用したインストール・パッケージを用意しているため,インストール作業は簡単だ。ダウンロードしたZIPファイルを解凍してsetup.exeを起動すると,インストール・ウィザードが立ち上がる。あとは画面の指示に従って作業を進めていけばよい。

 ウィザードの最後の画面で[configure the MySQL Server now]チェック・ボックスをオンにしておくと(デフォルトではオン),インストールが完了した後,直ちに[MySQL Server Instance Configuration Wizard](図1[拡大表示])が起動する。このウィザードでは,インストールしたMySQLを開発に使うのか,運用に使うのか,といった質問に答えていくだけで,メモリー/ディスクの割当量や同時接続数などを自動的に設定してくれる。オープン・ソースのソフトによくある各種設定ファイルをテキスト・エディタで編集するといった面倒な作業は不要だ。後で設定を変更する必要が生じた場合は,再度ウィザードを起動することもできる。

 RDBMSの扱いに慣れていない方は,GUIベースの管理ツールがあるかどうかも気になるだろう。MySQLのインストール・パッケージにはコマンド・ラインの管理ツールしか付属していないものの,開発元のMySQLは別に「MySQL Administrator」「MySQL Query Browser」という2つのGUIツールを用意している。

 MySQL Administratorは,MySQLの管理作業全般をGUI画面で実行できるツールである。具体的には,MySQLの各種パラメータの閲覧/設定,データベース・ユーザーの作成/変更,バックアップ/リストア,ログの閲覧,データベースやテーブルなどの作成/変更——などを行える。テーブル作成画面(図2[拡大表示])では,データ型を指定する際に最初の数文字を入力しただけで残りを自動的に補完してくれるなど,使い勝手もよい。

 一方,MySQL Query Browserは,SQL文の作成/実行/デバッグなどをGUI画面で行うツールである。メニューを選ぶだけでテーブルの内容を一覧表示したり編集したりする機能を備えており,簡単なデータ入力にも利用できる。ストアド・プロシージャ/ファンクションも,このツールを使って作成するのが簡単だ。

GUIツールでファンクションを作成

 では実際にストアド・プロシージャ/ファンクションを作成してみよう。ここでは手始めに,文字列を返すだけの簡単なストアド・ファンクションを作成してみる。引数に名前を渡して呼び出すと,「Hello,<名前>!」という文字列を返すものだ。

 まず,MySQL Query Browserの画面右側のツリーで適当なデータベースを右クリックし,メニューから[Create New Procedure/Function]を選択する。作成するプロシージャ/ファンクションの名前を問い合わせるダイアログが表示されたら,「SayHello」と入力して[Create FUNCTION]ボタンを押す。これで,図3[拡大表示]のような編集画面にストアド・ファンクションのひな型が生成されるので,引数や処理本体などを記述していけばよい。コードの記述が終わったら,画面右上にある緑色の[Execute]ボタンを押せば,データベースにストアド・ファンクションが登録される。

 作成したストアド・ファンクションのテストも,MySQL Query Browserで実行できる。画面右側のツリーで今作成したストアド・ファンクションをダブル・クリックすると,画面上部にファンクションを呼び出すためのSQL文のひな型が生成される(図4[拡大表示])。ここで引数などを適当に補ってから[Execute]ボタンを押せば,実行結果が画面下部に表示される。

.NETから利用してみる

 作成手順が理解できたところで,もう少し複雑な例も紹介しておこう。図5[拡大表示]は,架空の通販サイトで商品を購入した際に発生する「ポイント」を計算するストアド・プロシージャだ。このサイトでは商品の単価が1万円未満なら5%,1万円以上なら10%のポイントが付くとして,引数に指定した顧客が今月獲得したポイントを計算している。

 図5[拡大表示]では,SELECT文で注文明細(OrderDetails)テーブルと商品マスター(Customers)テーブルを検索し,得られた結果をカーソルで1行ずつ取り出してポイントを計算している。処理の繰り返しにはREPEAT構文を,結果の取り出しにはFETCH構文を利用した。なお,この処理自体は,MySQLが用意するSUM関数やIF関数を組み合わせて1つのSQL文で記述することもできる。図5[拡大表示]のコードはあくまで説明のためのものと考えてほしい。

 MySQLをWindowsアプリケーションやWebアプリケーションから利用する場合には,通常ドライバやミドルウエアと呼ばれるソフトを介してアクセスする必要がある。MySQLではそのために,ODBCドライバ,JDBCドライバに加え,.NETアプリケーションからアクセスするためのクラス・ライブラリ(マネージ・プロバイダ)「MySQL Connector/NET」を用意している。このクラス・ライブラリを利用することで,MySQLにアクセスする.NETアプリケーションを開発できる。

 実際に今作ったストアド・プロシージャを呼び出すASP.NET WebアプリケーションをVisual Studio .NET 2003で作成してみたのが図6[拡大表示]だ。画面中央の表にはSQL文を発行した結果を,その下の「今月の累計ポイント」の部分にはストアド・プロシージャを実行した結果を表示している。MySQL Connector/NETは.NET Frameworkに付属するSQL Server用クラス・ライブラリとよく似たクラス構造を持つため,.NETでのデータベース・プログラミング経験があれば使うのは難しくない。ただし,エラーの扱いなど細かい部分に違いがあるので,クラス名を置換するだけで移植できるとは考えないほうがよい。

RDBMS間で互換性がない点に注意

 ストアド・プロシージャ/ファンクションを作成するに当たって注意が必要なのは,IF文やREPEAT文をはじめとする多くの構文がRDBMSによって異なることだ。SQLは元々手続き型の言語ではないため,米Microsoftや米Oracleは独自に言語仕様を拡張してストアド・プロシージャ/ファンクションをサポートした。それがTransact-SQLやPL/SQLである。MySQL 5.0はISO/IECが策定した標準仕様の最新版「SQL 2003」に従って言語仕様を定めているが,メジャーなRDBMSでSQL 2003を高いレベルでサポートしているのは,現時点で米IBMのDB2しかない。

 例として,図5[拡大表示]のストアド・プロシージャをSQL Server 2000用にTransact-SQLで書き直したものを図7[拡大表示]に示す。Transact-SQLはREPEAT文をサポートしていないためにWHILE文を利用しているほか,IFの後に“THEN”が不要であるなど,数多くの違いがあることが分かる。

 こうした理由から,RDBMSを導入する際には将来を見据えた計画が必要になる。単に「タダだから」という理由でMySQLを導入してしまうと,後でデータの移行やコードの移植に大きな手間がかかる可能性がある。将来SQL Serverを導入する可能性があるなら,まずはMSDE(Microsoft Desktop Engine)や現在開発中の後継版SQL Server 2005 Expressなどの利用を検討してみてほしい。MSDE/SQL Server 2005 Expressならコードを全く変更することなくSQL Serverに移行できる。作成できるデータベースのサイズが2Gバイト以下,同時接続数が5を超えると遅くなる,といったMSDEの制限も,SQL Server 2005 Expressでは緩和される予定だ。

 一方,こうした移行の予定がないなら,MySQLは非常に魅力的な選択肢の1つである。特に,ちょっとしたWebアプリケーションを構築するといった場合にはぜひ検討してみてほしい。

製品名MySQL 5.0
開発元スウェーデンMySQL
国内販売元ソフトエイジェンシー
価格GPLは無償,コマーシャル・ライセンスは3万5490円から
URLhttp://www.mysql.com/
世界で最も使われているオープン・ソースのRDBMS。新版での機能追加により,市販RDBMSと機能面でも並ぶようになった。データベースを使うだけなら商用目的であってもGPLでOK。