본문 바로가기
IT/Database

[Mysql] Trigger 사용

by 성준하이 2024. 7. 16.
반응형

이전 포스팅에서 Trigger에 대해 다룬 글이 있다.

자세한 내용은 아래 참고 포스팅 참고 바란다.

 

Mysql 에서 Trigger 를 사용하려면 아래와 같이 사용이 가능하다.

 

 

예제
DELIMITER //

CREATE TRIGGER update_level
 AFTER 
UPDATE ON game_table
   FOR EACH ROW
 BEGIN
    IF NEW.level_up != OLD.level_up THEN
       UPDATE game_table SET level_up = NEW.level_up 
       WHERE level_up = OLD.level_up;
   END IF;
   END; //

DELIMITER ;

 

문법 설명

 

DELIMITER //
문장 구분자를 '//'로 설정

원래 명령문 또는 쿼리를 사용할 때 세미콜론 ';' 으로 구분하는데 Trigger 생성 시 IF문 등에서 ';'를 사용하려고 임시로 구분자를 //로 변경하는 것


CREATE TRIGGER update_level
CREATE TRIGGER [트리거 이름]


AFTER UPDATE ON game_table
AFTER UPDATE ON [변경을 감지할 테이블]
해당 테이블에 UPADTE 이벤트가 실행된 후
FOR EACH ROW
아래 나올 조건에 해당하는 모든 row에 적용한다는 뜻


BEGIN ~ END
BEGIN
          IF 조건1 THEN
                  Query문;
          ELSE IF 조건 2 THEN
                  Query문;
          ELSE 
                  Query문;
         END IF;
END; //
BEGIN~END 사이에 조건문과 실행문을 작성


game_table 테이블의 변경 전/후를 기준으로 필드 앞에 변경 전은 OLD, 변경 후는 NEW 키워드가 붙는다.
따라서 IF NEW.level_up != OLD.level_up THEN의 의미는 game_table의 변경 후 level_up 필드의 값과 변경 전 level_up 필드의 값이 불일치한다는 조건을 의미


이 조건을 만족하는 row는 IF문 아래 작성된 UPDATE 쿼리문을 실행하게 된다.


IF문 또는 ELSE IF문 또는 ELSE 문 작성이 완료 되었으면 END IF로 IF문 종료를 의미하고


이렇게 Trigger를 생성하고나면 구분자가 //로 설정되어 있기 때문에 원래대로 DELEMITER; 명령을 통해 구분자를 복원시킨다.


참고 포스팅

https://thenicesj.tistory.com/844

 

Trigger 란? (트리거)

트리거는 방아쇠를 당긴다는 의미이지만 데이터베이스에서 말하는 트리거는 조금 다른의미이다. 우선 트리거에 대해 위키 설명은 아래와 같다. https://en.wikipedia.org/wiki/Database_trigger Database trigger

thenicesj.tistory.com

 

반응형

댓글