首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql触发器存储的触发器已被调用存储触发器的语句使用

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

Stack Overflow用户
提问于 2009-10-17 17:08:55
回答 2查看 25K关注 0票数 11

我想设置一个触发器,以便在更新时预测字段为=3,则触发器将值更改为4并将其保存在数据库中。触发器在下面。

由于某种原因,我一直收到一个错误消息:

代码语言:javascript
复制
#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.

这样设置正确吗?

代码语言:javascript
复制
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 ;
EN

回答 2

Stack Overflow用户

发布于 2010-02-23 05:16:26

MySQL触发器不能操作分配给它们的表。所有其他主要的数据库管理系统都支持这一特性,所以希望MySQL能很快添加这一支持。

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

票数 41
EN

Stack Overflow用户

发布于 2012-07-11 03:50:38

此外,您还需要确保没有其他过程或函数对此特定过程所分配到的表执行更新,或者以递归结束。例如

代码语言:javascript
复制
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;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1582683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档