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

时间:2014-03-08 06:37:02

标签: mysql triggers

我正在开发一个&audit;历史'存储在我的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 - 您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在'IF(NEW.landline&lt;&gt; OLD.landline)附近使用正确的语法,或者(第17行的NEW.landline IS NOT NULL和OLD.landline'

1 个答案:

答案 0 :(得分:1)

您需要多个语句的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;