web-dev-qa-db-fra.com

Déclencheur MySQL si la condition existe

J'essaie d'écrire un déclencheur de mise à jour qui ne mettra à jour un mot de passe que si un nouveau mot de passe est défini dans l'instruction de mise à jour, mais j'ai de la difficulté à essayer de définir la syntaxe. Cela devrait être une évidence, mais je ne trouve pas la solution.

Voici mon code:

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;

J'ai essayé:

IF (NEW.password <> NULL) THEN

IF (NEW.password) THEN

IF NEW.password <> NULL THEN

IF (NEW.password > 0) THEN

IF (NEW.password != NULL) THEN

Et je suis sûr que beaucoup d'autres combinaisons, mais ça ne marche pas. Quelqu'un at-il une idée?

11
gurun8

Je pense que vous voulez mettre à jour le mot de passe OLD, lorsque le mot de passe NEW n'est pas fourni.

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 ;

Cependant, cela signifie qu'un utilisateur ne peut jamais effacer un mot de passe.


Si le champ mot de passe (déjà chiffré) est renvoyé dans la mise à jour vers mySQL, il ne sera ni nul ni vide et MySQL tentera de rétablir la fonction Password (). Pour détecter cela, utilisez plutôt ce code

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

Essayer de faire...

 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