Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL тригер, ако съществува условие

Мисля, че искате да го актуализирате обратно до OLD парола, когато НОВАТА не е предоставена.

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 ;

Това обаче означава, че потребителят никога не може да изтрие парола.

Ако полето за парола (вече криптирано) се изпраща обратно в актуализацията на mySQL, то няма да е нулево или празно и MySQL ще се опита да повтори функцията Password() в него. За да откриете това, използвайте вместо това този код
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. Има ли MySQL опция/функция за проследяване на историята на промените в записи?

  2. MySQL – Тази версия на MySQL все още не поддържа подзаявка „LIMIT &IN/ALL/ANY/SOME

  3. Производителност на MySQL:MySQL срещу MariaDB

  4. Плавно NHibernate DuplicateMappingException с AutoMapping

  5. Фатална грешка:Моля, прочетете раздела за сигурност на ръководството, за да разберете как да стартирате mysqld като root