이전 포스팅에서 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
'IT > Database' 카테고리의 다른 글
[Mysql] 테이블 정의서 만들기 (13) | 2024.07.18 |
---|---|
[Mysql] Workbench 에서 ERD 그리기 (12) | 2024.07.17 |
[Oracle] lengthb, substrb (11) | 2024.07.06 |
[Mysql] INTERVAL 사용 (기간/날짜 가져오기)(DATE_ADD) (11) | 2024.07.04 |
String 으로 된 Int 컬럼 정렬하기 (13) | 2024.06.26 |
댓글