sql >> Databáze >  >> RDS >> Mysql

Spouštěč MySQL, pokud existuje podmínka

Myslím, že ho chcete aktualizovat zpět na OLD heslo, když NOVÉ není dodáno.

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 ;

To však znamená, že uživatel nikdy nemůže vymazat heslo.

Pokud je pole pro heslo (již zašifrované) odesíláno zpět v aktualizaci do mySQL, pak nebude prázdné ani prázdné a MySQL se v něm pokusí znovu provést funkci Password(). Chcete-li to zjistit, použijte místo toho tento kód
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. Nezachycená výjimka 'PDOException' se zprávou 'SQLSTATE[HY093]:Neplatné číslo parametru'

  2. Rozdíl v MySQL JOIN a LEFT JOIN

  3. Postgres spoušť po vložení přístupu NOVÉ

  4. SQL počítají specifickou hodnotu ve více sloupcích a řádcích