2010-04-06 60 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

在存储函数或触发器, 它不允许修改已被使用的表 (用于 读或写)通过调用该函数或触发器的语句 。