Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MYSQL触发器中使用IF语句?_Mysql_Triggers - Fatal编程技术网

如何在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…我插入了错误的表,但是感谢你提供了更简单的代码!