Триггеры MySQL для отключения учетной записи пользователя - PullRequest
1 голос
/ 07 апреля 2010

Я пытаюсь создать MySQL Trigger, чтобы отключить чью-либо учетную запись, если они заходили на сайт 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;

Ответы [ 3 ]

1 голос
/ 15 апреля 2010

Вы столкнулись с ограничением MySQL. Ваша таблица users вызывает триггер (AFTER UPDATE ON users), поэтому сработавший код не может его изменить. См. MySQL-руководство :

Внутри сохраненной функции или триггера, не разрешается изменять таблицу который уже используется (для чтение или запись) по заявлению который вызвал функцию или триггер.

0 голосов
/ 15 апреля 2010

Я бы использовал триггер 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;
0 голосов
/ 07 апреля 2010

Я не уверен, откуда взялась 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 на самом деле совпадает с пользователями, которых вы обновляете, в противном случае он не будет обновлять строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...