mysql - 触发器语句中的语法错误

标签 mysql sql

当我的users_reputation积分表已更新(插入),我想对该用户的积分进行新的计数(SUM)并更新 total_rep users 中的列表。

这是我想出来的,但不断出现语法错误。如果有人能指出我的错误,我将不胜感激。

CREATE TRIGGER after_insert_rep_points AFTER INSERT ON users_reputation
FOR EACH ROW
BEGIN
DECLARE new_total INT(10);
SELECT SUM(rep_points) INTO new_total FROM users_reputation
WHERE user_id = NEW.user_id;
UPDATE users SET rep_total = new_total WHERE user_id = NEW.user_id;
END

这些是我的表格示例供引用:

用户:

  user_id    |  first_name    |  total_rep
-------------+----------------+--------------
  10001      |  Jim           |  17
  10002      |  Bob           |  5

USERS_REPUTATION:

  user_id  |  rep_task                     |  rep_points  |  rep_date
-----------+-------------------------------+--------------+-----------------------
  10001    |  Commented on article         |  5           |  2012-11-12 08:40:32
  10001    |  Read an article              |  2           |  2012-06-12 12:32:01
  10001    |  Shared an article            |  10          |  2012-06-04 17:39:44
  10001    |  Read an article              |  2           |  2012-05-19 01:04:11
  10002    |  Commented on article         |  5           |  2012-06-17 09:34:21

最佳答案

您需要在开头添加分隔符更改。

delimiter |

CREATE TRIGGER after_insert_rep_points AFTER INSERT ON users_reputation
...
END

|
delimiter ;

分隔符向数据库引擎发出语句结束信号。通常是;。但这会在第一个 ; 处结束存储过程。而且它的定义是不完整的。

您可以更改分隔符并将其添加到过程末尾。之后将分隔符更改回 ;

关于mysql - 触发器语句中的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13342134/

相关文章:

mysql - 如何在 SUM 生成的列上找到 MAX 值

mysql 存储过程动态Where 子句

sql - 使用 nvarchar 作为外键怎么样?

php - 增加值(value)按钮

php - 无法获取我的购物车中商品的总金额

mysql - 在单个表上使用 Sql Join 两次

sql - 如何在递归表(SQL)中获取 2 行的最低公共(public)父级

sql - Access 分区数据查询并对每个分区求和?

sql - 如何在 ColdFusion 中覆盖 SQL 清理

mysql - 我的加入返回 0 个结果