TOPサーバ構築・運用> 具体的な例
徹底比較!! PostgreSQL vs MySQLパート2
徹底比較!! PostgreSQL vs MySQLパート2

第7回:トリガ
著者:NTTデータ   藤塚 勤也   2007/9/20
前のページ  1  2  3   4  次のページ
具体的な例

   ではここで実際に簡単なトリガをPostgreSQLとMySQLを使ってそれぞれ作成し、個々のケースついて説明します。なお、PostgreSQLのトリガ処理部分はPL/pgSQLにて記述しています。

   トリガを作成する対象のテーブルとして図1のようなsampleテーブルを用意します。
sampleテーブル
図1:sampleテーブル

   sampleテーブルは、データ型char(1)のcol01カラムを持ち、初期状態として3レコードが格納されているものとします。

   作成するトリガの名称を「tri_sample」とし、sampleテーブルへのUPDATE文が実行される場合に起動されるものとします。さらに、tri_sampleトリガはAFTERトリガとし、行単位にて起動されるものとします。

   tri_sampleの処理内容は、sampleテーブルの更新前col01カラムの値が数値文字の場合のみ、図2のようなlogsampleテーブルに更新前のcol01カラムの値と更新後のcol01カラムの値を挿入します。

logsampleテーブルへの動作
図2:logsampleテーブルへの動作

   リスト1とリスト2は、それぞれPostgreSQLのトリガの処理部分と定義部分の設定です。

リスト1:PostgreSQLのトリガ処理部分
create function tri_test() returns trigger as $tri_test$
  begin
     if old.col01 >= '0' and old.col01 <= '9' then
       insert into logsample values (old.col01,new.col01);
     end if;
     return null;
  end;
$tri_test$ language plpgsql;

リスト2:PostgreSQLのトリガ定義部分
create trigger tri_sample after update on sample
for each row execute procedure tri_test();

   PostgreSQLでは、まずtri_test()という名称のユーザ定義関数を作成します。このtri_test()のRETURNS句ではTRIGGER型を指定しています。そして、CREATE TRIGGER文のEXECUTE PROCEDURE句にて、事前に作成したユーザ定義関数tri_test()を指定しています。

   リスト3は、MySQLの処理部分と定義部分の設定になります。

リスト3:MySQLの処理部分と定義部分の設定
create trigger tri_sample after update on sample for each row
  begin
     if old.col01 >= '0' and old.col01 <= '9' then
       insert into logsample values (old.col01,new.col01);
     end if;
  end;

   一方のMySQLでは、PostgreSQLのようにCREATE TRIGGER文の中ではEXECUTE PROCEDURE句が使用できません。よって、CREATE TRIGGER文の中にBEGIN-END句を使用した処理部分を記述しています。

   PostgreSQL、MySQL共にCREATE TRIGGER文内の「after」はAFTERトリガを、「update」はUPDATE文を対象とすることを、そして「for each row」は行単位であることを意味しています。

   トリガの処理部分に関してはこの例は非常に簡単なものなので、PostgreSQL、MySQLともにほぼ同じような記述となっていることがわかると思います。

前のページ  1  2  3   4  次のページ


NTTデータ  藤塚 勤也
著者プロフィール
株式会社NTTデータ   藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。

INDEX
第7回:トリガ
  はじめに
  開発言語
具体的な例
  sampleの実行結果からみる処理の流れ