MySQL에서 트리거는 데이터베이스에서 테이블에 입력, 수정, 삭제 등의 이벤트가 발생되었을 때 실행되는 프로시저다.
(트리거는 로그 기록용도로 많이 사용)
특이점으로 MySQL의 트리거는 DDL문을 수행할 때 동작하는 트리거를 제공되지 않는다.
즉, MySQL의 트리거는 DML문(
INSERT,UPDATE,DELETE)이 수행될 때 실행된다.
이러한 트리거는 크게 2가지가 존재하며, 트리거에는 IN/OUT 매개변수를 사용할 수 없다.
트리거에는 이벤트 시작 전/후를 기준으로 데이터를 저장할 수 있다.
이때 이벤트 시작 이전 데이터는 OLD 키워드를 사용하여 데이터를 불러올 수 있고, 이벤트 시작 이후 데이터는 NEW 키워드를 사용하여 데이터를 불러올 수 있다.
| NEW | OLD | |
|---|---|---|
| INSERT | 사용 가능 | 사용 불가 |
| DELETE | 사용 불가 | 사용 가능 |
| UPDATE | 사용 가능 | 사용 가능 |
DELIMITER $$ CREATE TRIGGER <트리거명> <BEFORE 또는 AFTER> <INSERT 또는 UPDATE 또는 DELETE> ON <원본 테이블> FOR EACH ROW -- 원본 테이블의 모든 행에 대해 적용 BEGIN 트리거 로직 작성... END $$ DELIMITER ;트리거 예시 : 고객 정보 테이블에 값이 추가(insert)되면 트리거 동작
-- 고객정보 테이블 : cust_tb -- 트리거 로그 기록용 테이블 : log_insert_tb DELIMITER $$ CREATE TRIGGER log_insert_trg ALTER INSERT ON cust_tb FOR EACH ROW -- 원본 테이블의 모든 행에 대해 적용 BEGIN insert into log_insert_tb(NEW.col1, NEW.col2, ...); END $$ DELIMITER ;