我正在开发一个&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'
答案 0 :(得分:1)
您需要多个语句的BEGIN和END关键字
BEGIN
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;
END;