Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Gatilho do MySQL se a condição existir


Acho que você quer atualizá-lo de volta para o OLD senha, quando a NOVA não for fornecida.
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 ;

No entanto, isso significa que um usuário nunca pode deixar uma senha em branco.


Se o campo de senha (já criptografado) estiver sendo enviado de volta na atualização para o mySQL, ele não será nulo ou em branco, e o MySQL tentará refazer a função Password() nele. Para detectar isso, use este código
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 ;