我在为一个基本表创建触发器时遇到了问题,该触发器将在插入时检查插入的值是否大于3000,并将其替换为0。它将引发以下错误:Can't update table 'staff' in stored function/trigger because it is already used by statement which invoked this stored function/trigger
表的结构非常简单:
CREATE TABLE `staff` (
`ID` int(11) NOT NULL,
`NAZWISKO` varchar(50) DEFAULT NULL,
`PLACA` float DEFAULT NULL
)
它的触发器是这样的:
BEGIN
IF new.placa >= 3000 THEN
UPDATE staff SET new.placa = 0;
END IF;
END
我不完全明白这里发生了什么,但我怀疑一些递归,但我是相当新的主题触发器和我的实验室即将到来,所以我想为它做好准备。
1条答案
按热度按时间zpgglvta1#
MySQL不允许触发器对触发器执行的同一个表执行UPDATE/INSERT/DELETE操作,因为这很有可能导致无限循环。也就是说,在UPDATE触发器中,如果可以更新同一个表,就会导致UPDATE触发器执行,这将更新同一个表,依此类推。
但是我猜您只想更改触发器处理的同一行上
placa
的值。如果是这样,只需更改SET
即可:请记住,在更改列值时必须使用BEFORE触发器.