我在为一个基本表创建一个触发器时遇到了问题,如果插入的值中有一个大于3000,并将其替换为0,则该表将检查insert。它抛出此错误:
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我不完全明白这里发生了什么,但我怀疑有一些递归,但我对触发器这个话题非常陌生,而且我有实验室要来,所以我想做好准备。
发布于 2022-11-28 18:45:11
MySQL不允许触发器对执行触发器的同一表执行UPDATE/INSERT/DELETE,因为导致无限循环的可能性太大了。也就是说,在UPDATE触发器中,如果可以更新相同的表,就会导致UPDATE触发器执行,更新相同的表,以此类推。
但是,我想您只需要更改由触发器处理的同一行上的placa值。如果是这样的话,只需SET它:
BEGIN
IF new.placa >= 3000 THEN
SET new.placa = 0;
END IF;
END请记住,在更改列值时必须使用前置触发器。
https://stackoverflow.com/questions/74605132
复制相似问题