这个错误是由于MySQL的限制导致的。在触发器中,不能更新触发器所在的表,因为这可能会导致无限递归调用触发器。

解决方法是使用BEFORE触发器,并且在BEFORE触发器中修改NEW,而不是直接修改表。例如:

CREATE TRIGGER trigger_name BEFORE UPDATE ON table_name FOR EACH ROW BEGIN SET NEW.field_name = 'new_value'; END;

在这个例子中,BEFORE触发器会在UPDATE语句执行之前修改NEW的值,从而达到更新表的目的。这样就避免了在触发器中更新表的问题。

注意,如果你需要在触发器中使用旧的值,可以使用OLD来引用它。例如:

CREATE TRIGGER trigger_name BEFORE UPDATE ON table_name FOR EACH ROW BEGIN SET NEW.field_name = CONCAT('new_', OLD.field_name); END;

在这个例子中,BEFORE触发器会将旧的field_name值添加到新值的前面,从而创建一个新的值。

mysql触发器返回错误 ERROR 1442 HY000 Cant update table table in stored functiontrigger because it is already used by statement which invoked this stored functiontrigger

原文地址: http://www.cveoy.top/t/topic/bfwW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录