更正mysql触发器语法以防止无限循环
我正在创建以下测试触发器,以便在执行更正mysql触发器语法以防止无限循环,mysql,sql,Mysql,Sql,我正在创建以下测试触发器,以便在执行更新操作时更新字段的值: 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 store
更新操作时更新字段的值:
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 ;
分隔符//
在更新主\u itemmaster之前创建触发器测试\u索引
每行
开始
如果NEW.name OLD.name或NEW.locationOLD.location,则
设置NEW.guid=concat(NEW.name,NEW.location);
如果结束;
结束//
定界符;
我测试了它,它工作了!如果您只更新一个字段,也可以
问候谢谢你的回答。这就是我想要实现的目标。假设我有三个字段,name+location+guid
,每当我更新行的位置或名称时,我还希望guid更新为concat(name,location)
。我该怎么做呢?见更新的答案(我忘了放concat(NEW.name,NEW.location))。我对它进行了测试,效果良好。