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

标签 mysql if-statement triggers sql-update

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

这是我的代码:

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 - You have an error in your SQL syntax; check the manual that corresponds > to your MySQL server version for the right syntax to use near '' at line 4

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

最佳答案

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

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,代码也能正常工作,因为它是一条语句,末尾只有一个 ;

关于MySQL 触发器与 IF 语句返回 #1064,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37273542/

相关文章:

java - 使用瘦 jdbc 驱动程序创建 oracle 数据库触发器

php - 使用嵌套 for 循环更新数据库?

mysql - 使用 WP_Query 编写查询

php - 任何人都知道为什么这个 MYSQL INSERT 不起作用?

mysql - 如果第一个表在 MySQL 查询中使用 UNION 没有返回记录,如何从另一个表中获取记录

excel - 根据 =RIGHT 值的值执行不同的 VLOOKUP

c++ - 如何确定输入文件中的一行是否是最后一行? C++

java - else 上的未知语法错误

Sql 触发器 - 它属于哪个表?

sql - 什么时候数据库触发器不好?