我想设置一个触发器,以便在更新时预测字段为= 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 ;
答案 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;
这将以递归方式结束,因此请注意现有的存储过程和函数。