MySQL에서는 트리거(Trigger)를 활용하면 한 테이블에 데이터가 삽입될 때 다른 테이블에도 자동으로 동일한 데이터를 기록할 수 있습니다. 이번 글에서는 AFTER INSERT 트리거를 만들어 두 개의 테이블에 데이터를 동시에 저장하는 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 CREATE 명령어를 사용하여 첫 번째 테이블을 생성합니다.
mysql> create table Table1
-> (
-> id int,
-> name varchar(100)
-> );
Query OK, 0 rows affected (0.62 sec)
이어서 데이터가 복사될 두 번째 테이블도 같은 구조로 생성합니다.
mysql> create table Table2
-> (
-> id int,
-> name varchar(100)
-> );
Query OK, 0 rows affected (0.49 sec)
2. 트리거 생성하기
다음과 같이 트리거를 생성할 수 있습니다.
mysql> delimiter #
mysql> create trigger Table1Trigger after insert on Table1
-> for each row
-> begin
-> insert into Table2(id, name) values (new.id, new.name);
-> end#
Query OK, 0 rows affected (0.29 sec)
mysql> delimiter ;
여기서 주목할 점은 두 가지입니다.
- 구분자(Delimiter) 변경: 트리거 본문 내부에 세미콜론(
;)이 포함되므로, MySQL이 문장을 잘못 해석하지 않도록 구분자를 임시로#으로 변경한 후, 트리거 생성이 끝나면 원래대로 되돌립니다. - NEW 키워드:
NEW.id,NEW.name은 Table1에 막 삽입된 행의 값을 의미합니다. 이 값을 그대로 Table2에 삽입하는 것입니다.
즉, 이 트리거는 Table1에 새로운 행이 삽입될 때마다 자동으로 실행되어, 동일한 데이터를 Table2에도 기록합니다.
3. 데이터 삽입 후 결과 확인
Table1에 여러 개의 행을 한 번에 삽입해 보겠습니다.
mysql> insert into Table1 values(1,'John'),(2,'Smith'),(3,'Carol');
Query OK, 3 rows affected (0.28 sec)
Records: 3 Duplicates: 0 Warnings: 0
이제 두 테이블 모두에 레코드가 정상적으로 저장되었는지 확인합니다. 먼저 Table1을 조회합니다.
mysql> select * from Table1;
Table1에는 3개의 레코드가 성공적으로 삽입된 것을 확인할 수 있습니다.
+------+-------+
| id | name |
+------+-------+
| 1 | John |
| 2 | Smith |
| 3 | Carol |
+------+-------+
3 rows in set (0.00 sec)
다음으로 두 번째 테이블인 Table2를 조회해 보겠습니다.
mysql> select * from Table2;
별도의 INSERT 작업 없이도 Table2에 동일한 레코드가 자동으로 삽입된 것을 확인할 수 있습니다. 이것이 바로 트리거가 작동한 결과입니다.
+------+-------+
| id | name |
+------+-------+
| 1 | John |
| 2 | Smith |
| 3 | Carol |
+------+-------+
3 rows in set (0.00 sec)
마무리
이처럼 AFTER INSERT 트리거를 사용하면 원본 테이블에 데이터가 들어올 때마다 백업 테이블이나 로그 테이블에 자동으로 데이터를 복제할 수 있습니다. 감사 로그(audit log) 기록, 데이터 동기화 등 다양한 상황에서 유용하게 활용할 수 있으니 참고하시기 바랍니다.