MySQL триггер, если условие существует - PullRequest
12 голосов
/ 21 марта 2011

Я пытаюсь написать триггер обновления, который будет обновлять пароль только в том случае, если в операторе обновления задан новый пароль, но я ужасно стараюсь закрепить синтаксис. Это должно быть легко, но я просто не могу найти решение.

Вот мой код:

CREATE TRIGGER upd_user BEFORE UPDATE ON `user`
FOR EACH ROW BEGIN
  IF (NEW.password <> '') THEN
        SET NEW.password = PASSWORD(NEW.password);
  END IF;
END;

Я пробовал:

IF (NEW.password <> NULL) THEN

IF (NEW.password) THEN

IF NEW.password <> NULL THEN

IF (NEW.password > 0) THEN

IF (NEW.password != NULL) THEN

И я уверен, что много других комбинаций, но они просто не работают. У кого-нибудь есть понимание?

Ответы [ 2 ]

36 голосов
/ 21 марта 2011

Я думаю, что вы хотите обновить его до пароля OLD, когда НОВЫЙ пароль не предоставляется.

DROP TRIGGER IF EXISTS upd_user;

DELIMITER $$

    CREATE TRIGGER upd_user BEFORE UPDATE ON `user`
    FOR EACH ROW BEGIN
      IF (NEW.password IS NULL OR NEW.password = '') THEN
            SET NEW.password = OLD.password;
      ELSE
            SET NEW.password = Password(NEW.Password);
      END IF;
    END$$

DELIMITER ;

Однако это означает, что пользователь никогда не сможет удалить пароль.


Если поле пароля (уже зашифрованное) отправляется обратно в обновлении mySQL, оно не будет пустым или пустым, и MySQL попытается повторить функцию Password () для него.Чтобы обнаружить это, используйте этот код вместо
DELIMITER $$

    CREATE TRIGGER upd_user BEFORE UPDATE ON `user`
    FOR EACH ROW BEGIN
      IF (NEW.password IS NULL OR NEW.password = '' OR NEW.password = OLD.password) THEN
            SET NEW.password = OLD.password;
      ELSE
            SET NEW.password = Password(NEW.Password);
      END IF;
    END$$

DELIMITER ;
0 голосов
/ 17 мая 2018

Попробуй сделать ...

 DELIMITER $$
        CREATE TRIGGER aumentarsalario 
        BEFORE INSERT 
        ON empregados
        FOR EACH ROW
        BEGIN
          if (NEW.SALARIO < 900) THEN 
             set NEW.SALARIO = NEW.SALARIO + (NEW.SALARIO * 0.1);
          END IF;
        END $$
  DELIMITER
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...