首页,MySQL不允许在触发器中对触发器本身绑定的表进行操作,否则会有如下报错:
[Err] 1442 - Can't update table 'sss' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
当sss这个表的c1字段值为2或3时,要求自动设置c2字段的值为1,否则字段设置为0。当然,要求新增和修改的时候,都要能够同步操作。
DROP TRIGGER tri_sss;
delimiter $$
CREATE TRIGGER `tri_sss` BEFORE INSERT ON ss FOR EACH ROW
BEGIN
IF NEW.c1 = 2 || NEW.c1 = 3 THEN
SET new.c2 = 1;
ELSE
SET new.c2 = 0;
END IF;
END
$$
delimiter ;
DROP TRIGGER tri_sss_UPDATE;
delimiter $$
CREATE TRIGGER `tri_sss_UPDATE` BEFORE UPDATE ON ss FOR EACH ROW
BEGIN
IF NEW.c1 = 2 || NEW.c1 = 3 THEN
SET new.c2 = 1;
ELSE
SET new.c2 = 0;
END IF;
END
$$
delimiter ;
大概看明白了,上面两个触发器,一个是管insert,另一个管update。当NEW.c1为2或3时,执行new.c2 = 1。当然这中间最重要的一点是“BEFORE”,在INSERT和UPDATE之前都有一个BEFORE,绝对不能写成AFTER了。就是说,我们这个操作,是在真正插入之前进行,而不是在插入之后!
关于MySQL触发器更新当前表的记录报错的解决办法,本文就介绍这么多,希望对大家有所帮助!