触发器语句中的语法错误

时间:2012-11-12 10:34:03

标签: 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

1 个答案:

答案 0 :(得分:2)

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

delimiter |

CREATE TRIGGER after_insert_rep_points AFTER INSERT ON users_reputation
...
END

|
delimiter ;

分隔符表示数据库引擎结束语句。通常是;。但这会在第一个;结束存储过程。它的定义是不完整的。

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