前回のコラムで紹介したとおり,MySQL 5.0ベータ版がリリースされた。ベータ版のリリースによって,機能がほぼフィックスされた。既にMySQL 5.0の新機能として,本連載の第5回に「MySQL 5.0の新機能ストアド・プロシジャ」と題して紹介している。今回は,リリースされたばかりのMySQL 5.0.4-betaを使用して,MySQL 5.0の新機能であるトリガーとビューを紹介する。

データ更新時に自動実行する「トリガー」

 データベース・サーバーのサーバー・サイド処理として,ストアド・プロシジャとトリガーは双璧である。ストアド・プロシジャは,必要な時に呼び出すサブルーチン的な位置付けだ。それに対してトリガーは,テーブルのデータが更新されたときに自動的に実行する。テーブルに対して,INSERT,DELETE,UPDATEの各ステートメントが実行される際に,指定した処理を自動実行する。

 なお,現時点では,テーブル名を指定した処理を記述できない。また,CALLなどを呼び出せない。そのため,異なるテーブルにデータを保存するような処理はできない。この制限は将来撤廃される予定だが,現時点では我慢するしかない。

トリガー作成ステートメントの構文

 トリガーの作成には,CREATE TRIGGERステートメントを使用する。トリガーは,どのようなタイミングで実行するか指定するため,ストアド・プロシジャと比較すると複雑な構文となっている。


リスト1●CREATE TRIGGERステートメント

CREATE TRIGGER トリガー名 タイミング イベント ON 対応テーブル
 FOR EACH ROW 処理内容;
 タイミングは,イベント前に処理を実行するか,イベント後に処理を実行するかを指定する。

表1●タイミング
BEFORE 処理前
AFTER 処理後

 イベントは,どのような事象に対して処理を実行するかを指定する。レコードの追加,削除,更新のいずれかに対応して処理を行う。

表2●イベント
INSERT レコードの追加
DELETE レコードの削除
UPDATE レコードの更新

 処理内容では,カラムを指定するための2つのキーワードが用意されている。


表3●カラムを指定するキーワード
OLD. カラム名 イベント実行前のカラム値
NEW. カラム名 イベント実行後のカラム値

 次は,実際にCREATE TRIGGERステートメントを使いトリガーを作成する。