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
相关产品推荐
相关产品推荐

