这是一个创建于 3795 天前的主题,其中的信息可能已经有所发展或是发生改变。
为了实现某条数据的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的数据)不能为同一张表。
小弟现在比较迷惑,求大神指条明路,先谢谢了。
4 条回复 • 2014-07-24 08:27:49 +08:00
|
|
1
rainysia 2014-07-23 17:11:09 +08:00 1
不要用触发器. 换成程序逻辑来处理.
|
|
|
3
iyaozhen 2014-07-23 19:17:05 +08:00
好像触发器不是用来做这个事的。 触发器只能用来插入数据的时候再另外一个表里面也插入数据,删除数据的时候另一个表也删除数据等事情。 判断某个字段值等于什么的时候执行操作好像不行,这个需要程序来做。
|
|
|
4
msg7086 2014-07-24 08:27:49 +08:00
因为你在更新记录的时候把他删了。
|