mysql error #1442
さて、私はインターネット上で多くの場所を探しました。
このストアド関数/トリガーを呼び出したステートメントで既に使用されているため、ストアド関数/トリガーのテーブル 'unlucky_table' を更新できません
これはmysqlのバグか、mysqlが提供しない機能であると言う人もいます。
MySQL トリガーは、割り当てられているテーブルを操作できません。他のすべての主要な DBMS はこの機能をサポートしているため、MySQL がこのサポートをすぐに追加することを願っています。
これは、レコードを挿入するときの再帰的な動作が原因であると主張する人もい ます。mysql は何らかのロック処理を行っています。挿入した同じテーブルの行を挿入/更新/削除することはできません..トリガーが何度も呼び出されるため..再帰に終わる
なぜこれが再帰的なのか理解できません。私は2つのテーブルがtable1
ありtable2
、SQLクエリを次のように実行する場合があります
update table1 set avail = 0 where id in (select id from table2 where duration < now() - interval 2 hour);
今、私はafter update trigger
オンにtable1
なっています
CREATE TRIGGER trig_table1 AFTER UPDATE ON table1
FOR EACH ROW begin
if old.avail=1 and new.avail=0 then
delete from table2 where id=new.id;
end if;
更新クエリを実行すると、1442 エラーが発生します。この場合、何が再帰的ですか?
is this error a lack of feature in mysql?
OR
does this have to do with how mysql executes queries?
OR
is there something logically wrong with executing such queries?