IF 语句返回 #1064 的 MySQL 触发器

Posted

技术标签:

【中文标题】IF 语句返回 #1064 的 MySQL 触发器【英文标题】:MySQL Trigger with IF statement returning #1064 【发布时间】:2016-05-17 10:28:48 【问题描述】:

如果表wp_bp_xprofile_data 中带有field_id 106 的条目被修改,我正在尝试创建一个触发器来修改表wp_users 中的字段api_key_modified。该条目只能针对同一用户进行更新。

这是我的代码:

CREATE TRIGGER trigger_api_key_update AFTER UPDATE ON wp_bp_xprofile_data
FOR EACH ROW
    IF new.field_id = 106 THEN
        UPDATE wp_users SET api_key_modified = 1 WHERE id = new.user_id;
    END IF;

结果我得到:

1064 - 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以获取正确的语法,以便在第 4 行的 '' 附近使用

如果我删除 IF 语句,代码确实可以工作 - 但它会更新所有修改的数据,而不仅仅是 field_id 106 的修改。

【问题讨论】:

【参考方案1】:

您需要更改分隔符。否则定义在第一个 ; 处结束,这将使其不完整

delimiter |
CREATE TRIGGER trigger_api_key_update AFTER UPDATE ON wp_bp_xprofile_data
FOR EACH ROW BEGIN
    IF new.field_id = 106 THEN
        UPDATE wp_users SET api_key_modified = 1 WHERE id = new.user_id;
    END IF;
END
|
delimiter ;

没有if,代码可以工作,因为它是一条语句,最后只有一个;

【讨论】:

我尝试使用从其他帖子中看到的分隔符,与您使用 $$ 显示的相同,但它不起作用。但你的确实如此,所以真的谢谢你!

以上是关于IF 语句返回 #1064 的 MySQL 触发器的主要内容,如果未能解决你的问题,请参考以下文章

MySQl 错误 #1064 存储过程 IF ELSE 带有多个 SELECT 语句

MySql 触发语法错误 1064 空单引号

MySQL 语法错误 1064,带有 PDO UPDATE 语句(带有命名或未命名占位符)返回 WSOD

mysql 触发器 if 语句 update

MySQL - 在第 1 行附近创建触发器错误 1064

Mysql 触发器创建失败,错误 #1064