본문 바로가기

데이터베이스

Stored trigger (트리거)

  트리거

테이블에 삽입, 수정, 삭제 등의 작업(이벤트)이 발생할 때 자동적으로 작동하는 데이터 베이스 개체

프로시저와 달리 직저 실행시킬 수 없고 오직 해당 테이블에 이벤트가 발생할 경우에만 실행된다.

이벤트 발생 후 ROLLBACK 할 수 없다.

 

▶ 트리거 형식

 

▶ 트리거 상태

ALTER TRIGGER [트리거 이름] ENABLE : 트리거 사용
ALTER TRIGGER [트리거 이름] DISABLE : 트리거 사용 중지
ALTER TRIGGER [트리거 이름] COMPILE : 트리거 컴파일

 


  트리거 실습

실습1

DELIMITER $$

CREATE TRIGGER tb_member_trigger_after_delete
AFTER DELETEON tb_member_trigger FOR EACH ROW 
BEGIN
	BEGIN
	SET @msg='DELETE 트리거 발동';
	END

END $$
DELIMITER;

 

실습2

SET @msg:='';

DELETE
FROM
   tb_member_trigger
WHERE
   m_id = 'id015';

SELECT @msg;

 

실습3

after 트리거

CREATE TABLE `tb_member_trigger_backup` (
`m_id` VARCHAR(200) NOT NULL,
`m_pw` VARCHAR(200) NOT NULL,
`m_name` VARCHAR(200) NOT NULL,
`m_level` INT(11) NULL DEFAULT NULL,
`m_email` VARCHAR(200) NOT NULL,
`m_addr` VARCHAR(200) NOT NULL,
`m_reg_date` DATE NOT NULL,
`m_modify_type` VARCHAR(50) NULL DEFAULT NULL,
`m_modify_date` DATE NULL DEFAULT NULL,
`m_modify_user` VARCHAR(200) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB

 

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

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

 

'데이터베이스' 카테고리의 다른 글

Transction(트랜잭션)  (0) 2020.04.21
Stored Function (함수)  (0) 2020.04.13
Stored Procedure (프로시저)  (0) 2020.04.13
Stored Program  (0) 2020.04.13
View(뷰)  (0) 2020.04.06