mysql触发器存储触发器已被调用存储触发器的语句使用

时间:2009-10-17 17:08:55

标签: mysql sql triggers mysql-error-1442

我想设置一个触发器,以便在更新时预测字段为= 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 ;

2 个答案:

答案 0 :(得分:41)

MySQL触发器无法操纵分配给它们的表。所有其他主要的DBMS都支持这一功能,所以希望MySQL很快就会增加这种支持。

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

答案 1 :(得分: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;

这将以递归方式结束,因此请注意现有的存储过程和函数。