본문 바로가기
MySql

MySQL 조건이있는 경우 MySQL 트리거

by 베이스 공부 2020. 10. 14.
반응형

업데이트 문에 새 암호가 설정되어있을 때만 암호를 업데이트하는 업데이트 트리거를 작성하려고하지만 구문을 확인하는 데 끔찍한 시간을 보내고 있습니다. 이것은 생각할 필요가 없지만 해결책을 찾지 못하고 있습니다.

내 코드는 다음과 같습니다.

CREATE TRIGGER upd_user BEFORE UPDATE ON `user`
FOR EACH ROW BEGIN
  IF (NEW.password <> '') THEN
        SET NEW.password = PASSWORD(NEW.password);
  END IF;
END;

난 노력 했어:

IF (NEW.password <> NULL) THEN

IF (NEW.password) THEN

IF NEW.password <> NULL THEN

IF (NEW.password > 0) THEN

IF (NEW.password != NULL) THEN

그리고 다른 많은 조합을 확신하지만 작동하지 않습니다. 누구든지 통찰력이 있습니까?

 

해결 방법

 

새 비밀번호가 제공되지 않는 경우 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 업데이트에서 다시 전송되는 경우 null 또는 공백이 아니며 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 ;

 

참조 페이지 https://stackoverflow.com/questions/5372872

 

 

반응형

댓글