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 语句