MySQL更新带触发器的行时报错1442:无法更新触发调用的表
解决MySQL触发器Error Code: 1442问题
错误根源
你创建的AFTER UPDATE触发器在触发后又执行了UPDATE warriors语句,这会引发递归触发,同时MySQL禁止在触发当前更新操作的语句仍在占用表时,由触发器再次修改该表,因此抛出1442错误。
解决方案
改用BEFORE UPDATE触发器,直接修改待更新行的power字段值,无需额外执行UPDATE语句。BEFORE UPDATE在行更新前触发,可通过NEW对象直接设置字段值,不会触发循环也不会违反MySQL的表占用限制。
正确的触发器创建语句
CREATE TRIGGER power_update BEFORE UPDATE ON warriors FOR EACH ROW SET NEW.power = NEW.practise_hours * 100;
关键说明
BEFORE UPDATE:指定触发器在更新行之前触发NEW:代表即将被更新的行对象,修改NEW.power会直接将该值作为更新后的power字段值- 无需额外执行
UPDATE warriors语句,彻底避免了递归触发和表占用冲突
执行你原本的更新语句即可正常生效:
UPDATE warriors SET practise_hours = 80 WHERE id = 9;
内容的提问来源于stack exchange,提问作者Ronit Pandey
相关产品推荐
相关产品推荐

