如何在MYSQL触发器中使用IF语句?
尝试创建一个触发器,该触发器将查找两个条件并使用这些条件更新审核表。触发器在客户表上工作,并查找电话号码和/或信用额度的更新。审核表将有一列显示更新的字段或两者是否都已更新 以下是我迄今为止遇到的(使用下面的代码更新)相同错误:如何在MYSQL触发器中使用IF语句?,mysql,triggers,Mysql,Triggers,尝试创建一个触发器,该触发器将查找两个条件并使用这些条件更新审核表。触发器在客户表上工作,并查找电话号码和/或信用额度的更新。审核表将有一列显示更新的字段或两者是否都已更新 以下是我迄今为止遇到的(使用下面的代码更新)相同错误: #Here's the audit table I created: create table cust_audit(customerNumber INT, customerName varchar(50), phon
#Here's the audit table I created:
create table cust_audit(customerNumber INT, customerName varchar(50),
phone varchar(50), creditLimit dec(10,2),
last_update timestamp, `user` varchar(30),
row_value varchar(20), fields_changed,
varchar(30));
Delimiter $$
CREATE TRIGGER cust_upd_old
AFTER UPDATE
ON customers
FOR EACH ROW
Begin
INSERT INTO audit_table(customerNumber,
customerName,
phone,
creditLimit,
last_update,
`user`,
row_value,
fields_changed)
VALUES (OLD.customerNumber,
OLD.customerName,
OLD.phone,
OLD.creditLimit,
now(),
current_user(),
'before update',
CASE WHEN NEW.phone = OLD.phone THEN 'creditLimit'
WHEN NEW.creditLimit = OLD.creditLimit THEN 'phone number'
ELSE 'both'END);
END $$
DELIMITER ;
触发器将运行,但当我尝试运行update语句时,更新失败,错误代码为:1054。“field list”中的未知列“customerNumber”,但select语句将起作用,因此我认为触发器出现了一些错误。使用MYSQL 8.0.21
update customers set phone = '2128822470' where customerNumber = 181;
select * from customers where customerNumber = 181;
可以简化为
创建触发器cust\u upd\u old
更新后
论顾客
每行
插入审计表(客户编号,
客户名称,
电话,
信用额度,
上次更新,
`用户`,
行_值,
字段(已更改)
值(OLD.customerNumber,
老客户名称,
老电话,
旧的信用额度,
现在(),
当前用户(),
“更新前”,
当NEW.phone=OLD.phone时,则为'creditLimit'
当NEW.creditLimit=OLD.creditLimit'电话号码'
否则“两个”结束);
为两个表提供完整的DDL。错误是关于审核表
,而不是客户
表谢谢!我插入了错误的审计表谢谢你@akina…我插入了错误的表,但是感谢你提供了更简单的代码!