MySQL触发器插入时同表更新报错问题求助
解决MySQL触发器插入时更新同表字段的报错问题
嘿,这个问题我之前也踩过坑,咱们来一步步捋清楚:
报错原因
你现在的触发器用了BEFORE INSERT事件,但里面写了UPDATE date SET ...的语句——MySQL明确禁止在触发当前表操作的触发器里,直接对这张表执行写操作(比如UPDATE/INSERT/DELETE),因为这会引发表锁冲突或者潜在的循环触发风险,所以才会抛出你看到的那个错误。
正确的写法
其实完全不需要用UPDATE语句,BEFORE INSERT触发器的核心能力就是在数据插入到表之前,修改即将插入的记录(也就是NEW对象)的字段值。你直接给NEW.dateValid赋值就行,这样插入的时候,dateValid就会带着计算后的值一起存入表中。
修改后的触发器代码:
DROP TRIGGER IF EXISTS `restrictionotp`; CREATE TRIGGER `add_interval` BEFORE INSERT ON `date` FOR EACH ROW SET NEW.dateValid = DATE_ADD(NEW.dateCreated, INTERVAL 5 MINUTE);
补充提醒
- 这里用
SET直接给NEW对象的字段赋值,是BEFORE INSERT触发器的标准用法,不会触发额外的表操作,自然就避开了锁冲突的问题。 - 注意字段名的大小写:你的原代码里用了
datevalid和datecreated,但问题描述里是dateValid和dateCreated,要和你表中实际的字段名保持一致,避免大小写不匹配的问题。
内容的提问来源于stack exchange,提问作者i_am_will_u
相关产品推荐
相关产品推荐

