2010-04-06 168 views
1

我想創建一個MySQL觸發器來禁用某人的帳戶,如果他們已經登錄到該網站3次。我試圖用下面的代碼創建這個觸發器,但是不管是什麼times_logged_in都不是將is_active設置爲0。任何幫助,將不勝感激。MySQL觸發器禁用用戶帳戶

CREATE TRIGGER updateTrigger AFTER UPDATE ON users 
FOR EACH ROW 
BEGIN 
UPDATE users SET is_active=0 WHERE NEW.is_code=1 
AND NEW.times_logged_in>=3 
AND NEW.user_id=user_id; 
END; 

回答

0

我不知道在哪裏user_id來自於你的扳機,看起來像一個多餘的檢查,試試這個:

CREATE TRIGGER updateTrigger AFTER UPDATE ON users 
FOR EACH ROW 
BEGIN 
    UPDATE users SET is_active=0 WHERE NEW.is_code=1 
    AND NEW.times_logged_in>=3 
END; 

而且,可以肯定的是is_code = 1實際上是匹配的用戶你」重新更新,如果不是,它不會更新任何行。

+0

我試過了你的代碼,但它仍然不能正常工作。我也加倍檢查了is_code = 1是否匹配,但觸發器似乎還沒有做任何事情。 – 2010-04-06 21:29:10

+0

@Mike D - 'is_code = 1'與**更新陳述**或現有的行相匹配,與'times_logged_in'相同? – 2010-04-06 21:44:57

+0

is_code = 1與現有的行匹配。 times_logged_in與更新語句相匹配,它正在遞增1. – 2010-04-06 21:47:31

0

我會用一個BEFORE UPDATE觸發器來代替:

CREATE TRIGGER updateTrigger BEFORE UPDATE ON users 
FOR EACH ROW 
BEGIN 
IF NEW.is_code=1 AND NEW.times_logged_in>=3 THEN 
    SET NEW.is_active=0; 
END IF; 
END; 
1

你打的MySQL的限制。您的表users會調用觸發器(AFTER UPDATE ON users),因此觸發的代碼無法修改它。見MySQL-Manual

在存儲函數或觸發器, 它不允許修改已被使用的表 (用於 讀或寫)通過調用該函數或觸發器的語句 。