0

次のように、同じテーブルにUPDATEステートメントを含むトリガーを記述したいと思います。

create trigger AFTER INSERT ON myTable
   FOR EACH ROW BEGIN
    update myTable set ... where ...
   end

これどうやってするの?

4

3 に答える 3

1

MySQLドキュメントの引用

トリガーは他のテーブルにも影響を与える可能性がありますが、関数またはトリガーを呼び出したステートメントによって(読み取りまたは書き込みのために)すでに使用されているテーブルを変更することは許可されていません。

于 2012-09-12T07:23:46.230 に答える
0

これを行うことができます(挿入後トリガーをトリガーしたテーブルを更新します)が、再帰を回避するために、FORINSERTトリガーとFORUPDATEトリガーは別々のプロシージャである必要があります。もう1つの問題は、MicrosoftSQLServerが更新ステートメントに対してFORUPDATEトリガーを1回だけ呼び出すことです。SQLServerにはFOREACHROWはありません。FORINSERTTRIGGER内の単一のUPDATE...table ... WHEREステートメントを使用して、同時に多数の行を更新します。

于 2012-09-12T07:29:25.027 に答える
0

それは不可能だと思います。

以下に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をご覧ください

于 2012-09-12T07:50:56.770 に答える