MySQL에서는 트리거(Trigger)를 활용하면 한 테이블에 레코드가 삽입되는 순간, 다른 테이블에도 자동으로 데이터를 추가할 수 있습니다. 이 기능은 로그 기록, 데이터 동기화, 감사(audit) 용도 등으로 매우 유용하게 활용됩니다.
트리거 생성 기본 문법
먼저 트리거의 기본적인 작성 형식은 다음과 같습니다.
DELIMITER //
create trigger yourTriggerName before insert on yourTableName1
for each row
begin
insert into yourTableName2 values (yourValue1,yourValue2,...N);
end ;
//
DELIMITER ;
예제 테이블 준비하기
실습을 위해 첫 번째 테이블인 DemoTable1을 생성해 보겠습니다.
mysql> create table DemoTable1
(
StudentId int,
StudentName varchar(40)
);
Query OK, 0 rows affected (0.69 sec)
이어서 데이터가 자동으로 삽입될 두 번째 테이블 DemoTable2를 생성합니다.
mysql> create table DemoTable2(
Id int,
Name varchar(40)
);
Query OK, 0 rows affected (0.61 sec)
BEFORE INSERT 트리거 만들기
이제 DemoTable1에 레코드가 삽입되기 전(before insert)에 실행되는 트리거를 생성합니다. 이 트리거가 호출되면 DemoTable2에 값이 자동으로 들어갑니다.
mysql> DELIMITER //
mysql> create trigger afterinserttrigger before insert on DemoTable1 for each row
begin
insert into DemoTable2 values (10,'Chris');
end ;
//
Query OK, 0 rows affected (0.13 sec)
mysql> DELIMITER ;
참고: 트리거 이름이 afterinserttrigger로 되어 있지만 실제로는 BEFORE INSERT 시점에 동작합니다. 트리거 이름은 개발자가 임의로 지정할 수 있으므로, 가독성을 위해 동작 시점을 반영한 이름을 사용하는 것이 좋습니다.
첫 번째 테이블에 레코드 삽입
이제 DemoTable1에 레코드를 하나 삽입해 보겠습니다.
mysql> insert into DemoTable1 values(1,'David');
Query OK, 1 row affected (0.21 sec)
결과 확인하기
SELECT 문을 사용하여 첫 번째 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable1;
실행 결과는 다음과 같습니다.
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1 | David |
+-----------+-------------+
1 row in set (0.00 sec)
그다음 두 번째 테이블의 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable2;
출력 결과는 아래와 같습니다.
+------+-------+
| Id | Name |
+------+-------+
| 10 | Chris |
+------+-------+
1 row in set (0.00 sec)
정리
위 예제에서 볼 수 있듯이, DemoTable1에 레코드를 직접 삽입했음에도 불구하고 트리거 덕분에 DemoTable2에도 값(10, 'Chris')이 자동으로 저장된 것을 확인할 수 있습니다. 이처럼 MySQL 트리거를 사용하면 애플리케이션 코드 없이도 데이터베이스 차원에서 테이블 간 연동 로직을 손쉽게 구현할 수 있습니다.