【发布时间】:2017-02-23 21:09:19
【问题描述】:
我正在 mysql 中开发一个项目,我无法在 2 个触发器之间进行操作,我想做的是
1) 创建一个触发器,在一个表中插入值后更新另一个表的数据,工作
2) 创建一个触发器,更新上述表后,删除引爆第一个触发器的行,不起作用
我搜索了文档、示例、教程、goolge,当然还有网站的不同帖子,但我没有找到任何可以指导我或帮助解决我的问题的东西:(
暂时我有这个
1)
CREATE TRIGGER update1 BEFORE INSERT ON table1
FOR EACH ROW
UPDATE table2 SET table2.value = table2.value +
NEW.value WHERE ac_id = NEW.acc_id
2)
CREATE TRIGGER `delete` AFTER UPDATE ON table2
FOR EACH ROW DELETE FROM table1 WHERE table1.acco_id =
NEW.acc_id
单独两个都可以,但是如果我在 table1 中插入,则会出现以下消息
无法更新存储函数/触发器中的表“table1”,因为它已被调用此存储函数/触发器的语句使用。
对不起,我的英语不好,任何帮助将不胜感激,在此先感谢
【问题讨论】:
-
我不确定这里有没有可以回答的问题。如果问题是“这是预期的行为吗?”,那么答案是“是的,这是一个有据可查的限制”。如果问题是“有解决方法吗?”,答案是“不在单个 SQL INSERT 语句的上下文中,不,没有解决方法。”可以使用两个(或更多)单独的语句来执行操作。
-
@spencer7593 最大的限制是数据来自我无权访问的网页,这就是为什么无法实现存储过程的原因,按照你说的,是不是可以通过其他方式实现吗?
-
您的
INSERT语句会触发两个触发器。他们在两个表之间执行操作。 MySQL 会阻止您这样做,因为它可能导致无限循环。斯宾塞说的是,你不能使用 1 个查询(启动整个事情的INSERT一个)来做到这一点。你无法修复它,因为没有任何东西被破坏,MySQL 阻止你开枪。你需要想出一种不同的方法。