错误消息是相当不言自明的。一 TRIGGER 禁止修改触发触发器的表。 mysql参考手册中记录了该限制 https://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.html 存储的函数或触发器不能修改已被调用该函数或触发器的语句(用于读取或写入)使用的表。 在一个 BEFORE INSERT 以及 BEFORE UPDATE 触发器时,我们可以通过引用将值赋给正在插入或更新的行的列 NEW.column_name 例如
-- check if value assigned to `col` is valid
IF NEW.col IN ('cash','checking','credit') THEN
-- it is valid, so do nothing
DO 0;
ELSE
-- value isn't valid, so override the provided value
SET NEW.col = 'cash';
END IF;
空的 BEGIN END 区块优先于 DO 0; 声明。另外,一定要预料到 NULL 并确保正确处理这些值(请注意,“不等于”比较 NULL 会回来的 NULL ,不是真的或假的。)
-- check if value assigned to `col` is valid
IF NEW.col IN ('cash','checking','credit') THEN
-- it is valid, so do nothing
BEGIN END;
ELSE
-- value isn't valid, so override the provided value
SET NEW.col = 'cash';
END IF;
2条答案
按热度按时间htzpubme1#
而不是执行
insert
,更换OLD
通过将属性设置为NEW
:存储在中的重写值
NEW.type
将在触发器完成时插入表中。lx0bsm1f2#
错误消息是相当不言自明的。一
TRIGGER
禁止修改触发触发器的表。mysql参考手册中记录了该限制
https://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.html
存储的函数或触发器不能修改已被调用该函数或触发器的语句(用于读取或写入)使用的表。
在一个
BEFORE INSERT
以及BEFORE UPDATE
触发器时,我们可以通过引用将值赋给正在插入或更新的行的列NEW.column_name
例如空的
BEGIN END
区块优先于DO 0;
声明。另外,一定要预料到NULL
并确保正确处理这些值(请注意,“不等于”比较NULL
会回来的NULL
,不是真的或假的。)