[ 서버 & DB 관련 ]/MySQL
mysql 트리거(TRIGGER) 테스트
BIZLAB
2019. 9. 5. 16:38
/*
트리거 테스트
*/
# 데이터 테이블 생성
CREATE TABLE TEST_BIG
(
idx int auto_increment primary key
,v1 varchar(200)
,v2 varchar(200)
,v3 varchar(200)
,v4 varchar(200)
);
# 트리거 테이블 생성
CREATE TABLE TEST_TRG
(
idx int auto_increment primary key
,v_idx int
,v_before varchar(200)
,v_after varchar(200)
,reg_date datetime default now()
);
-- auto_increment 값을 주는 컬럼엔 반드시 primary key를 지정해 주어야 한다.
-- delete 트리거
DELIMITER $$
CREATE DEFINER=root@localhost TRIGGER trg_delete
before delete on TEST_BIG for each row
BEGIN
insert into TEST_TRG(v_idx, v_before) values(old.idx, old.v1);
END $$
DELIMITER ;
delete from TEST_BIG where idx=15;
-- insert 트리거
DELIMITER $$
CREATE DEFINER=root@localhost TRIGGER trg_insert
after insert on TEST_BIG for each row
BEGIN
insert into TEST_TRG(v_idx, v_before) values(new.idx, new.v1);
END $$
DELIMITER ;
INSERT INTO TEST_BIG (v1, v2, v3, v4) values('트리거1', '트리거2', '트리거3', '트리거4');
-- update 트리거
DELIMITER $$
CREATE DEFINER=root@localhost TRIGGER trg_update
after update on TEST_BIG for each row
BEGIN
insert into TEST_TRG(v_idx, v_before, v_after) values(new.idx, old.v1, new.v1);
END $$
DELIMITER ;
update TEST_BIG set v1='트리거2222' where idx = 4460102;
-----------------
select * from TEST_TRG;
select * from TEST_BIG order by idx desc;
-----------------
# 트리거 목록 확인
show triggers;
# 트리거 스크립트 확인
show create trigger [트리거명];
# 트리거 삭제
DROP TRIGGER [트리거명];
# mysql은 트리거 활성화, 비활성화 옵션이 없음.
========================
트리거 수정(삭제 후 재생성)
DELIMITER $$
-- LOCK TABLES trg_insert WRITE $$
DROP TRIGGER IF EXISTS trg_insert $$
CREATE DEFINER=root@localhost TRIGGER trg_insert
after insert on TEST_BIG for each row
BEGIN
insert into TEST_TRG(v_idx, v_before) values(new.idx, new.v1);
END $$
DELIMITER ;
UNLOCK TABLES;