DBMS
MySQL - 트리거
전주천둥새
2023. 5. 15. 15:51
1. 트리거(Trigger)
- 테이블에 삽입, 수정, 삭제 등의 작업(이벤트)이 발생할 때에 자동으로 작동하는 데이터베이스 개체
1) 특징
- 프로시저와 달리 직접 실행시킬 수 없고 오직 해당 테이블에 이벤트가 발생할 경우에만 실행(매개변수 사용불가)
- 이벤트 발생 후 ROLLBACK 할 수 없다.
2) 트리거 생성


>>> 테이블과 발생이벤트를 선택하면 이름은 자동생성된다.
3) 트리거 실습
1. after update 트리거
BEGIN
INSERT INTO tb_member_trigger_backup
( m_id
, m_pw
, m_name
, m_level
, m_email
, m_addr
, m_reg_date
, m_modify_type
, m_modify_date
, m_modify_user
) VALUES (
OLD.m_id
, OLD.m_pw
, OLD.m_name
, OLD.m_level
, OLD.m_email
, OLD.m_addr
, OLD.m_reg_date
, '수정'
, CURDATE()
, CURRENT_USER());
END

>>> update 실행시 update 완료 이전에 지정한 테이블에 update 이전의 값을 이관한다.
2. after delete 트리거
BEGIN
INSERT INTO tb_member_trigger_backup
( m_id
, m_pw
, m_name
, m_level
, m_email
, m_addr
, m_reg_date
, m_modify_type
, m_modify_date
, m_modify_user
) VALUES (
OLD.m_id
, OLD.m_pw
, OLD.m_name
, OLD.m_level
, OLD.m_email
, OLD.m_addr
, OLD.m_reg_date
, '삭제'
, CURDATE()
, CURRENT_USER());
END

>>> delete 구문 실행 이전에 기존의 데이터를 지정한 테이블로 이관시킨 후 delete를 실행한다.
3. before insert 트리거
BEGIN
CASE
WHEN NEW.m_level = '관리자' THEN SET NEW.m_level = '1';
WHEN NEW.m_level = '판매자' THEN SET NEW.m_level = '2';
ELSE SET NEW.m_level = '3';
END CASE;
END

>>> insert 구문 실행 이전에 트리거의 case 구문을 거쳐서 지정한대로 값이 변경된 후 insert 구문을 실행한다.