DB/mysql(mariaDB)

Mysql Trigger(트리거)

자코린이 2022. 6. 28. 22:44

mysql 에는 트리거라는 개념이 있습니다. 

이 개념은 어떠한 이벤트가 발생하면 사전에 지정한 행동을 DB가 자동으로 실행해줍니다.

보통 DB에 로그를 남기거나, 백업 데이터를 만들어 두기 위해서 사용합니다.

 

저는 heidisql을 사용합니다.

테이블 생성처럼 오른쪽 클릭을 사용하시면 됩니다.

 

생성을 하시면 아래 화면이 나옵니다.

 

이름 : 트리거 이름 (하이디에서 자동으로 지어줍니다. 그냥 사용하셔도 되고, 바꾸셔도 됩니다.)

정의자 : 트리거를 만든 사람(기본으로 둡니다. 서버에서는 root면 안 됩니다.)

테이블 : 트리거를 실행할 테이블을 선택합니다. 즉, 이벤트가 발생할 테이블을 선택해주시면 됩니다.

이벤트 : 트리거가 발생할 이벤트를 선택합니다.

총 6 가지입니다.

after insert 값 삽입 후 실행 before insert 값 실행 전 실행
after delete 삭제 후 실행 before delete 삭제 전 실행
after update 수정 후 실행 before update 수정 전 실행

 

이처럼 6 가지가 있습니다. 필요에 따라 적절히 사용하세요.

 

 

이제부터는 예시입니다.

저는 log테이블에 데이터가 들어오면 count, name 테이블에 값을 넣어줄려고 합니다.

저는 테이블 3개를 만들었습니다. 

tb_count

이제 트리거를 만들어줍니다.

트리거

 

CREATE TRIGGER `tb_count_after_insert` AFTER INSERT ON `tb_log` FOR EACH ROW 
BEGIN	
	SET @product_val = (SELECT product FROM tb_log ORDER BY idx DESC LIMIT 1);
	INSERT INTO tb_product (product) VALUES (@product_val);
	위의 방법은 while, if 문을 사용할 때 변수에 값을 대입하기 위해 사용했습니다.
    보통은 아래 방법을 사용합니다.
    
	INSERT INTO tb_product (product) VALUES (new.product);
	INSERT INTO tb_count (count) VALUES (new.count);
END

 

잘 동작하는 것을 확인할 수 있습니다.