帐户表:enter image description here
MYSQL终端:enter image description here
我触发了Accounts表格,该表格将响应任何更新或插入数据库,这将为帐户类型提供除信用,支票或现金之外的任何其他价值。
我尝试实施触发器(已编译),但每当我尝试添加不是现金,信用卡和支票的东西时,它都会给我一个错误。什么可能导致/修复此错误?
答案 0 :(得分:0)
不是执行insert
,而是通过设置OLD
的属性,将列的NEW
值替换为您想要的新值:
IF OLD.type <> 'cash' and OLD.type <> 'credit' and OLD.type <> 'checking' THEN
SET NEW.type = 'cash'
END IF;
触发器完成后,NEW.type
中存储的覆盖值将插入到表格中。
答案 1 :(得分:0)
错误消息相当自我解释。禁止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
值,并确保对其进行适当处理。 (请注意,&#34;不等于&#34;与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;