sql >> Databasteknik >  >> RDS >> Mysql

MySQL-utlösare om villkoret finns

Jag tror att du menar att uppdatera den tillbaka till OLD lösenord, när det NYA inte medföljer.

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 ;

Detta innebär dock att en användare aldrig kan tömma ut ett lösenord.

Om lösenordsfältet (redan krypterat) skickas tillbaka i uppdateringen till mySQL, kommer det inte att vara null eller tomt, och MySQL kommer att försöka göra om funktionen Password() på det. För att upptäcka detta, använd den här koden istället
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. GET_FORMAT() Exempel – MySQL

  2. Var lagrar PostgreSQL konfigurations-/conf-filer?

  3. Databasmodellering

  4. Villkorligt mySQL-uttalande. Om sant UPPDATERA, om falskt INFOGA