我正在运行 MySQL 5.5.9 和 InnoDB。
我尝试创建一个版本化表,其中current
字段指示记录是否是最新版本。就像是:
| autonumber | id | name | current
| 1 | 1 | Yes | 0
| 2 | 1 | No | 1
不管怎样,我过去在 MSSQL 中经常通过AFTER INSERT
触发器将具有相同 id 的所有记录更新为current = 0
。所以我们进入MySQL:
DELIMITER |
CREATE TRIGGER TRIGGER_Products_UpdateEarlierVersions AFTER INSERT ON Products
FOR EACH ROW BEGIN
UPDATE Products
SET current = 0
WHERE id = new.id
AND current = 1
AND autonumber <> new.autonumber;
END;
|
这运行正常,但是在插入记录时:
insert into Products (id, name)
values (1, "Hello SO!");
我收到以下错误:
错误代码:1442。无法更新存储函数/触发器中的表“产品”,因为它已被调用此存储函数/触发器的语句使用。
有没有办法解决这个问题来实现类似的事情?
取自这里http://forums.mysql.com/read.php?99,122354,122505#msg-122505
当你插入一条记录时,mysql正在做一些锁定的事情。你不能
插入/更新/删除您插入的同一个表的行..因为
然后触发器会一次又一次地调用..最终以
递归
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)