[ 서버 & 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;