sql >> Base de Datos >  >> RDS >> Mysql

Desencadenador de MySQL si existe la condición

Creo que quieres actualizarlo de nuevo al OLD contraseña, cuando no se proporciona la NUEVA.

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 ;

Sin embargo, esto significa que un usuario nunca puede borrar una contraseña.

Si el campo de la contraseña (ya encriptado) se devuelve en la actualización de mySQL, entonces no será nulo ni estará en blanco, y MySQL intentará rehacer la función Password() en él. Para detectar esto, use este código en su lugar
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 ;