小编典典

MySql错误:无法更新存储的函数/触发器中的表

sql

我正在使用MySQL和Engine InnoDB。我有一个SQL表(简体),其中包含4列,如您在这张图片中看到的:

在此处输入图片说明

当需求的状态变为“完成”时,我希望其优先级为空,并且所有具有上述优先级的需求都将递减。

例如,如果第二个需求:“面包”为“完成”,则其优先级将设置为空,并且我希望“黄油”的优先级为2,“果酱”的优先级为3。

我有这个触发条件:

DELIMITER |
CREATE TRIGGER modify_priority_trigger BEFORE UPDATE ON your_table
FOR EACH ROW 
begin
    if NEW.State= 'Done'
    then
       update your_table
       set priority = priority - 1
       where priority is not null
       and priority > NEW.priority;

       set NEW.priority = NULL;
    end if;
end
|
delimiter ;

但是,当我从“进行中”到“完成”的状态编辑行时,出现错误。

#1442 -无法更新存储函数/触发器中的表“需求”,因为调用该存储函数/触发器的语句已使用该表。

我已经在Internet上寻找了此错误,但这是我第一次使用SQL触发器,所以我没有成功解决问题。谢谢你的帮助。


阅读 155

收藏
2021-04-14

共1个答案

小编典典

当您尝试更新表时,在触发器处启动一个无穷循环,触发器不用于更新自己的表,您可以创建一个新表,在其中保存表的主键值和优先级值,以便您可以在该表上更新优先级。在您的应用程序中或将要使用的任何地方,您都可以将这两个表连接起来。您也可以考虑在应用程序端使用以下sql更新表:

update your_table set state = 'NEW' and priority = priority - 1 where ....

还可以编写一个新的存储过程来每隔5/10分钟(无论需要什么)来修复您的数据向导。

2021-04-14