次のように、同じテーブルにUPDATEステートメントを含むトリガーを記述したいと思います。
create trigger AFTER INSERT ON myTable
FOR EACH ROW BEGIN
update myTable set ... where ...
end
これどうやってするの?
トリガーは他のテーブルにも影響を与える可能性がありますが、関数またはトリガーを呼び出したステートメントによって(読み取りまたは書き込みのために)すでに使用されているテーブルを変更することは許可されていません。
これを行うことができます(挿入後トリガーをトリガーしたテーブルを更新します)が、再帰を回避するために、FORINSERTトリガーとFORUPDATEトリガーは別々のプロシージャである必要があります。もう1つの問題は、MicrosoftSQLServerが更新ステートメントに対してFORUPDATEトリガーを1回だけ呼び出すことです。SQLServerにはFOREACHROWはありません。FORINSERTTRIGGER内の単一のUPDATE...table ... WHEREステートメントを使用して、同時に多数の行を更新します。
それは不可能だと思います。
以下に1つのテーブルスクリプトを作成します
CREATE TABLE `tbl1` (
`id` INT(10) NULL DEFAULT NULL,
`msg` VARCHAR(50) NULL DEFAULT NULL
)
次に、次のクエリを使用してそのテーブルにトリガーを作成しました
delimiter |
create trigger trigger1 before insert on tbl1 for each row begin
update tbl1 set msg='insert occured in tbl1' where id=5;
end
|
delimiter ;
次のクエリを実行しようとすると
insert into tbl1 values (1,'ddd');
次のエラーが発生しました
「ストアド関数/トリガーのテーブル'tbl1'は、このストアド関数/トリガーを呼び出したステートメントによって既に使用されているため、更新できません。」
したがって、それは不可能です。詳細については、http://bugs.mysql.com/bug.php?id=50684をご覧ください 。