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?
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.
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 ;
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