11

更新時に予測フィールドが=3の場合、トリガーが値を4に変更してデータベースに保存するように、トリガーを設定したいと思います。トリガーは以下のとおりです。

何らかの理由で、次のようなエラーが発生し続けます。

#1442 - Can't update table 'tzanalytic\_forecast\_cached' in stored 
function/trigger because it is already used by statement which invoked 
this stored function/trigger.

これは正しい方法で設定されていますか?

delimiter $$ 
CREATE TRIGGER no_BoW BEFORE UPDATE ON t FOR EACH ROW 
BEGIN set @prediction = new.prediction; 
UPDATE t SET t.prediction = (SELECT IF(@prediction = '3', '4', @prediction)) WHERE t.event_id = new.event_id AND t.price_tier = new.price_tier; END;
$$ delimiter ;
4

2 に答える 2

41

MySQL トリガーは、割り当てられているテーブルを操作できません。他のすべての主要な DBMS はこの機能をサポートしているため、MySQL がこのサポートをすぐに追加することを願っています。

http://forums.mysql.com/read.php?99,122354,240978#msg-240978

于 2010-02-22T21:16:25.557 に答える
0

また、この特定のプロシージャが割り当てられているテーブルで更新を実行する他のプロシージャまたは関数がないことを確認する必要があります。そうしないと、再帰が発生します。例えば

create trigger trig1 After update on table1 FOR EACH ROW 
BEGIN 
UPDATE table2 SET colum1 = column1 + 1
END;

create trigger trig2 After update on table2 FOR EACH ROW 
BEGIN 
UPDATE table1 SET colum2 = column2 + 1
END;

これは再帰になってしまうため、既存のストアド プロシージャと関数に注意してください。

于 2012-07-10T19:50:38.043 に答える