MySQLストアド&トリガ

MySQL5シリーズからサポートされているストアド(ストアドプロシージャ)&トリガ。

ストアドはSQL文をDBに保管(ストア)しておいて呼び出す機能で、解析などが完了した状態で保存されるので、複雑な構文のクエリで応答が高速になったり、簡単な分岐などを用いてまとまった処理を行ったりすることが出来る便利機能(CREATE PROCEDURE)
トリガはINSERTやUPDATE、DELETEを引き金(トリガ)にして処理を行うようにする機能(CREATE TRIGGER)

トリガの使いどころは、在庫表と発注表を用意しておいて、在庫表がUPDATEされてアイテムの数量が0になったら発注表に発注を追加すると言った自動処理や、NEWエイリアスを組み合わせることでINSERTされたレコードに定型処理を加えるというような場合だろう。
また、MySQLのトリガ処理ではタイミングにBEFOREとAFTERを指定することが出来て、BEFOREの場合には実行されるSQL文に先行して実行されるので、条件に満たない値が与えられた場合に引き金となったSQL文の処理を止めたりすることができる。

例:Yahooショップのリンクリストで、#ItemInfoアンカーがつくのを自動で取り除くトリガ

DELIMITER ..
CREATE TRIGGER remove_ii
BEFORE INSERT ON yahoo_link FOR EACH ROW
BEGIN
SET NEW.address = REPLACE(NEW.address, ‘%23ItemInfo’, ”);
END..
DELIMITER ;

yahoo_linkテーブルにINSERT文が発行された場合、address中の#ItemInfoを消している。 NEWは追加される行、あるいは更新後の行を指すエイリアスで、UPDATE文なら更新前の行を指すOLDエイリアスもある。

プログラム側に依存せず、DBシステム上の動作も高速になるため、ストアドやトリガを上手く使うのがDB連携システムのキモ。

(556)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP], MySQL   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です