MySQL的触发器来禁用用户帐户(MySQL Triggers to Disable A User

2019-09-29 16:10发布

我想创建一个MySQL触发禁用某个用户的帐户,如果他们在该网站的3倍已经登录。 我试图创建使用下面的代码这个触发,但不设置IS_ACTIVE 0不管是什么times_logged_in。 任何帮助,将不胜感激。

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;

Answer 1:

你打的MySQL的限制。 你的表users调用触发器( AFTER UPDATE ON users ),因此触发代码不能修改。 见的MySQL手册 :

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



Answer 2:

我不知道在哪里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实际上是匹配上要更新的用户,如果它不是,也不会更新任何行。



Answer 3:

我会用一个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;


文章来源: MySQL Triggers to Disable A User Account