【发布时间】:2014-08-14 12:55:41
【问题描述】:
我正在使用 MySQL 和 Engine InnoDB。我有一个包含 4 列的 SQL 表(简化),如图所示:
当需求状态变为“完成”时,我希望它的优先级为空,并且所有具有上述优先级的需求都会递减。
例如,如果第二个需求:“面包”是“完成”,它的优先级将设置为空,我希望“黄油”的优先级为 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 触发器,所以我没有成功纠正我的问题。 感谢您的帮助。
【问题讨论】:
-
你不应该更新同一个表的任何其他行,但刚刚检查的行,因为它会触发触发器......
-
一种无限循环?我怎么能做我想做的呢?
-
您可以使用存储过程来更新状态并处理此更改的其他影响。请注意,您也不能在更新触发器中使用这样的过程。