2012-11-12 46 views
0

當我的users_reputation點表得到更新(插入)時,我想對該用戶的點進行新的計數(SUM)並更新users表中的total_rep列。觸發器語句中的語法錯誤

這是我想出來的,但不斷收到語法錯誤。如果有人能指出我的錯誤,我將不勝感激。

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 

這些都是我的表的例子以供參考:

USERS:

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 

回答

2

您需要在添加一個分隔符變化開始。

delimiter | 

CREATE TRIGGER after_insert_rep_points AFTER INSERT ON users_reputation 
... 
END 

| 
delimiter ; 

分隔符向DB引擎發出語句結束的信號。通常是;。但是,這會在第一個;結束存儲過程。其定義不完整。

您可以更改分隔符並將其添加到過程的末尾。之後,將分隔符更改回;

+0

認爲這個工作因爲我現在得到一個特權錯誤。謝謝。 – TheCarver

+1

而我的共享主機帳戶不支持「超級用戶」MySQL特權!所以這浪費了一個小時!無論如何,謝謝:) – TheCarver

+0

Jeez,當我在一個問題上花費數小時,開始發佈一個問題時,我討厭它,然後最後的「可能已經有你的答案的問題」指向我一個答案。像這兒。謝謝。 – dcromley