具有多个 IF 语句的 MySQL 触发器不起作用

标签 mysql triggers

我正在处理一个“audit_history”表,该表存储在“myTable”表上执行的更新。我的代码仅使用处理密码更新的单个 IF 语句。但一旦我添加另一个,我就会收到 #1064 SQL 错误。所以我猜这与我的分隔符有关(?),但我就是无法让它工作。

任何和所有的帮助都会很棒。谢谢。

IF (NEW.password <> OLD.password)
OR (NEW.password IS NOT NULL AND OLD.password IS NULL)
OR (NEW.password IS NULL AND OLD.password IS NOT NULL)
THEN
INSERT INTO myTable.audit_history 
VALUES (
    'update'
    , NULL
    , NOW()
    , @user_id
    , 'user'
    , 'password'
    , OLD.password
    , NEW.password);
END IF;

IF (NEW.landline <> OLD.landline)
OR (NEW.landline IS NOT NULL AND OLD.landline IS NULL)
OR (NEW.landline IS NULL AND OLD.landline IS NOT NULL)
THEN
INSERT INTO myTable.audit_history
VALUES (
    'update'
    , NULL
    , NOW()
    , @user_id
    , 'user'
    , 'landline'
    , OLD.landline
    , NEW.landline);
END IF;

我收到此错误消息:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to you MySQL server version for the right syntax to use near ‘IF (NEW.landline <> OLD.landline) OR (NEW.landline IS NOT NULL AND OLD.landline’ at line 17

最佳答案

多个语句需要 BEGIN 和 END 关键字

BEGIN
 IF (NEW.password &lt;&gt; OLD.password)
    OR (NEW.password IS NOT NULL AND OLD.password IS NULL)
    OR (NEW.password IS NULL AND OLD.password IS NOT NULL)
 THEN
    INSERT INTO myTable.audit_history 
    VALUES (
     'update'
    , NULL
    , NOW()
    , @user_id
    , 'user'
    , 'password'
    , OLD.password
    , NEW.password);
 END IF;

 IF (NEW.landline &lt;&gt; OLD.landline)
   OR (NEW.landline IS NOT NULL AND OLD.landline IS NULL)
   OR (NEW.landline IS NULL AND OLD.landline IS NOT NULL)
 THEN
  INSERT INTO myTable.audit_history
   VALUES (
    'update'
    , NULL
    , NOW()
    , @user_id
    , 'user'
    , 'landline'
    , OLD.landline
    , NEW.landline);
 END IF;
END;

关于具有多个 IF 语句的 MySQL 触发器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266037/

相关文章:

php - 每个键值循环自增

php - 在mysql中插入多个复选框

mysql - 我可以在 TRIGGER 中创建 MYSQL TRIGGER WITH 或条件吗

mysql - 发现重复键时使用 MySQL 触发器更新另一个表

mysql - 无法在亚马逊云托管的 mysql 中创建触发器

java - 为什么我不能在java中连接到mysql数据库?

mysql - VB.net MySQL 连接检查不工作/缓慢

javascript - 在实际更改选择框之前获取 onChange 值

mysql - 如何存储本质上是与 SQL 中的唯一值相关联的列表的数据

javascript - Google Sheets onEdit 函数跳转到 A1 单元格