You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:08:07