mysql 如果薪金大于以下值,则无法更新插入值

wsxa1bj1  于 2022-12-03  发布在  Mysql
关注(0)|答案(1)|浏览(108)

我在为一个基本表创建触发器时遇到了问题,该触发器将在插入时检查插入的值是否大于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

我不完全明白这里发生了什么,但我怀疑一些递归,但我是相当新的主题触发器和我的实验室即将到来,所以我想为它做好准备。

zpgglvta

zpgglvta1#

MySQL不允许触发器对触发器执行的同一个表执行UPDATE/INSERT/DELETE操作,因为这很有可能导致无限循环。也就是说,在UPDATE触发器中,如果可以更新同一个表,就会导致UPDATE触发器执行,这将更新同一个表,依此类推。
但是我猜您只想更改触发器处理的同一行上placa的值。如果是这样,只需更改SET即可:

BEGIN
  IF new.placa >= 3000 THEN
     SET new.placa = 0;
  END IF;
END

请记住,在更改列值时必须使用BEFORE触发器.

相关问题