我正在尝试创建一个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;
答案 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;