본문 바로가기
데이터베이스

[MYSQL] Update Trigger 사용

by SoonNote 2023. 12. 4.
반응형

Trigger (트리거)

트리거(Trigger)는 사전적 의미로 '방아쇠'라는 뜻이다.

MySQL에서 트리거는 테이블에서 어떤 이벤트가 발생했을 때 자동으로 실행되는 것을 말한다.

즉, 어떤 테이블에서 특정한 이벤트(update, insert, delete)가 발생했을 때, 실행시키고자 하는 추가 쿼리 작업들을 자동으로 수행할 수 있게끔 트리거를 미리 설정해 두는 것이다.

예를 들어 고객이 물건을 구매해 구매 테이블에 정보가 insert되면, 등록된 트리거가 발동해 물품 테이블을 자동으로 update 쿼리문을 실행하게 하고, 또 등록된 트리거가 발동해 배송테이블에 insert 쿼리문을 실행시키게 끔 할 수 있다.

 

 

진행중인 프로젝트에 10개의 테이블에 하루에 각각 적게는 몇백, 많게는 몇만건의 데이터가 INSERT, UPDATE, DELETE가 되는 상황 이었다. 수정과 삭제가 될때 트리거를 사용하여 히스토리 테이블에 INSERT하도록 구현하였다.

 

다음은 실습할 test_table과 History를 남길 test_table_his 테이블 이다.

test_table
test_table_his

 

 

UPDATE를 할때 a컬럼의 값이 U이면 history테이블 type컬럼에 UPDATE, D이면 DELETE를 넣도록한 트리거문 이다.

DELIMITER $$
CREATE TRIGGER test_table_trigger
	AFTER UPDATE
    ON test_table
    FOR EACH ROW
BEGIN
	IF NEW.a = 'U' THEN
		INSERT INTO test_table_his (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, type) 
		VALUES (OLD.a, OLD.b, OLD.c, OLD.d, OLD.e, OLD.f, OLD.g, OLD.h, OLD.i, OLD.j, OLD.k, OLD.l, OLD.m, OLD.n, OLD.o, OLD.p, OLD.q, 'UPDATE');
	ELSEIF NEW.a = 'D' THEN
		INSERT INTO test_table_his (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,type) 
		VALUES (OLD.a, OLD.b, OLD.c, OLD.d, OLD.e, OLD.f, OLD.g, OLD.h, OLD.i, OLD.j, OLD.k, OLD.l, OLD.m, OLD.n, OLD.o, OLD.p, OLD.q, 'DELETE');
	END IF;
END $$
DELIMITER ;

위 코드에서 NEW.는 현재 들어온 값이고 OLD는 이미 들어가있는 테이블의 값들이라고 보면된다.

 

 

변경할 데이터 확인

 

a컬럼에 U를 넣고 b컬럼의 값을 bbb로 변경한다.

update test_table set a='U', b = 'bbb' where a='a';

b컬럼이 bbb로 변경된것을 확인

 

a컬럼을 D로 변경

update test_table set a='D', b = 'bbb' where b='bbb';

 

history 테이블을 확인해보자

트리거에서 a컬럼이 UPDATE할때 U나 D일때 히스토리테이블에 insert가 되도록 구현했는데 2개의 데이터가 들어와있으면 성공

 

 

NEW.a 컬럼이 U일때와 D일때 insert가 되는것을 확인했다.

반응형