web-dev-qa-db-ja.com

条件が存在する場合、MySQLトリガー

更新ステートメントに新しいパスワードが設定されている場合にのみパスワードを更新する更新トリガーを作成しようとしていますが、構文を特定しようとするのにひどい時間がかかります。これは簡単なはずですが、私は解決策を見つけていません。

これが私のコードです:

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

そして、私は他の多くの組み合わせを確信していますが、それは単に機能していません。誰か洞察力がありますか?

14
gurun8

新しいパスワードが提供されない場合は、パスワードを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 ;

ただし、これは、ユーザーがパスワードを空白にすることはできないことを意味します。


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 ;
37
RichardTheKiwi

やってみて...

 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 ;
0
Lucas Brogni