MySQL 初学者请教触发器问题

2014-07-23 17:04:41 +08:00
 airycanon
为了实现某条数据的number字段为0时自动删除该条数据,为product_sell表创建如下的触发器:
-------------------------------------------------------------------------------------------------------------------
CREATE TRIGGER number_check AFTER UPDATE ON product_sell
FOR EACH ROW
BEGIN
IF NEW.number=0 THEN DELETE FROM product_sell WHERE OLD.id=NEW.id;
END IF
END
-------------------------------------------------------------------------------------------------------------------

测试一下,执行下面的语句:
-------------------------------------------------------------------------------------------------------------------
UPDATE product_sell SET number=0 WHERE id='df31d0ed-1ecf-496e-996b-8840d834f170';
-------------------------------------------------------------------------------------------------------------------

结果该条数据number变为0,但并没有被删除,同时出现如下错误:
-------------------------------------------------------------------------------------------------------------------
Can't update table 'product_sell' in stored function/trigger because it is already used by statement
which invoked this stored function/trigger.
-------------------------------------------------------------------------------------------------------------------

Google上述错误后得到的信息是在触发器中使用UPDATE语句导致,但是我触发器中并没有执行UPDATE,另有人说使触发器被触发的对象(上文中product_sell表中数据的更新)和触发器执行时的目标(删除product_sell中number为0的数据)不能为同一张表。


小弟现在比较迷惑,求大神指条明路,先谢谢了。
2995 次点击
所在节点    MySQL
4 条回复
rainysia
2014-07-23 17:11:09 +08:00
不要用触发器. 换成程序逻辑来处理.
airycanon
2014-07-23 17:14:25 +08:00
@rainysia 多谢解答,不过我仍然想知道错误的根源是什么。
iyaozhen
2014-07-23 19:17:05 +08:00
好像触发器不是用来做这个事的。
触发器只能用来插入数据的时候再另外一个表里面也插入数据,删除数据的时候另一个表也删除数据等事情。
判断某个字段值等于什么的时候执行操作好像不行,这个需要程序来做。
msg7086
2014-07-24 08:27:49 +08:00
因为你在更新记录的时候把他删了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/124119

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX