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

MySQL触发器报错:无法更新触发语句正在使用的passenger表

解决MySQL触发器错误#1442的方案

错误原因

你写的AFTER INSERT触发器里,又执行了UPDATE passenger的操作——此时触发触发器的插入语句还在占用passenger表,MySQL不允许在触发器里更新触发它的那张表,所以抛出了#1442错误。

正确的解决方案

不需要用AFTER INSERT再去更新整张表,改用BEFORE INSERT触发器,在记录插入到passenger表之前,直接从trains表获取数据赋值给待插入的字段即可。

步骤1:删除原有错误触发器

DROP TRIGGER IF EXISTS insertDetails;

步骤2:创建新的BEFORE INSERT触发器

CREATE TRIGGER `insertDetails` BEFORE INSERT ON `passenger`
FOR EACH ROW
BEGIN
    SELECT train_name, startPlace, destination
    INTO NEW.train_name, NEW.startPlace, NEW.destination
    FROM trains
    WHERE trains.train_no = NEW.train_no;
END;

说明

BEFORE INSERT触发器在插入操作执行前触发,直接修改要插入的NEW对象的字段值,全程不需要对passenger表执行UPDATE操作,自然不会触发表占用的冲突问题,完美实现你从trains表自动填充字段的需求。

内容的提问来源于stack exchange,提问作者dipesh9765

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:45:56