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 구문을 실행한다.

'DBMS' 카테고리의 다른 글

MySQL - 트랜잭션  (0) 2023.05.15
MySQL - 사용자 정의 함수(프로시저와 차이점)  (0) 2023.05.15
MySQL - 프로시저  (0) 2023.05.15
MySQL 피벗테이블, 그룹콘캣(Group-concat)  (0) 2023.05.15
SQL - 서브쿼리  (0) 2023.05.15

+ Recent posts