Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyzwalacz MySQL, jeśli warunek istnieje

Myślę, że chcesz zaktualizować go z powrotem do OLD hasło, gdy NOWE hasło nie jest podane.

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 ;

Oznacza to jednak, że użytkownik nigdy nie może wymazać hasła.

Jeśli pole hasła (już zaszyfrowane) jest odsyłane w aktualizacji do mySQL, to nie będzie ono puste ani puste, a MySQL spróbuje ponownie wykonać na nim funkcję Password(). Aby to wykryć, zamiast tego użyj tego kodu
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 ;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę utworzyć ciągłą grupę w MySQL?

  2. Importowanie bazy danych MySQL z jednego serwera na drugi

  3. MySQL Workbench nie może załadować mysql.proc

  4. Klauzula IN nie używa indeksu

  5. Jak dodać wagi do tabeli MySQL i wybrać według nich losowe wartości?