MySQL触发器禁用用户帐户

时间:2010-04-06 21:05:57

标签: mysql triggers

我正在尝试创建一个MySQL触发器来禁用某人的帐户,如果他们已登录该网站3次。我尝试使用以下代码创建此触发器,但无论times_logged_in是什么,它都不会将is_active设置为0。任何帮助将不胜感激。

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;

3 个答案:

答案 0 :(得分:1)

你已经达到了MySQL的限制。您的表users调用触发器(AFTER UPDATE ON users),因此触发的代码无法修改它。请参阅MySQL-Manual

  

在存储的函数或触发器中,   不允许修改表   已经被使用了(for   阅读或写作)   调用函数或触发器。

答案 1 :(得分: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实际上与您正在更新的用户匹配,如果不是,则不会更新任何行。

答案 2 :(得分: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;