gpt4 book ai didi

mysql - 纠正 mysql 触发器语法以防止无限循环

转载 作者:行者123 更新时间:2023-11-29 06:15:32 29 4
gpt4 key购买 nike

我正在创建以下测试触发器,以便在 UPDATE 操作发生时更新字段的值:

CREATE TRIGGER `test_index` 
AFTER UPDATE ON `main_itemmaster`
FOR EACH ROW
UPDATE `main_itemmaster` SET `guid` = "hello" WHERE `id` = NEW.id;

但是,每当我对该表进行更新时,都会出现以下错误:

Can't update table 'main_itemmaster' in stored function/trigger 
because it is already used by statement which invoked this stored function/trigger.

为什么会发生这种情况,我该如何解决?

最佳答案

你想做什么?

很明显,你不能在更新时更新同一个表......它变成了循环。

您想在插入时更新吗?这应该是可能的:

CREATE TRIGGER `test_index` 
AFTER INSERT ON `main_itemmaster`
FOR EACH ROW
UPDATE `main_itemmaster` SET `guid` = "hello" WHERE `id` = NEW.id;

我看到你的评论了。我建议:

delimiter //
CREATE TRIGGER test_index BEFORE UPDATE ON main_itemmaster
FOR EACH ROW
BEGIN
IF NEW.name <> OLD.name OR NEW.location<>OLD.location THEN
SET NEW.guid = concat(NEW.name, NEW.location);
END IF;
END;//
delimiter ;

我测试了它,它有效!此外,如果您只更新一个字段。

问候

关于mysql - 纠正 mysql 触发器语法以防止无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36094919/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com