Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Trigger, wenn Bedingung vorhanden ist

Ich denke, Sie wollen es wieder auf den OLD aktualisieren Passwort, wenn das NEUE nicht angegeben wird.

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 ;

Dies bedeutet jedoch, dass ein Benutzer niemals ein Passwort ausblenden kann.

Wenn das Passwortfeld (bereits verschlüsselt) bei der Aktualisierung an mySQL zurückgesendet wird, ist es nicht null oder leer, und MySQL versucht, die Password()-Funktion darauf zu wiederholen. Um dies zu erkennen, verwenden Sie stattdessen diesen 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 ;