MySQL에서 한 테이블에 데이터가 삽입(INSERT)될 때 트리거(TRIGGER)를 사용하면 다른 테이블을 자동으로 업데이트할 수 있습니다. 이번 글에서는 실제 예제를 통해 트리거 생성부터 동작 확인까지 단계별로 살펴보겠습니다.
1. 첫 번째 테이블 생성
먼저 트리거에서 데이터가 자동으로 입력될 대상 테이블을 생성합니다.
mysql> create table DemoTable1 -> ( -> Id int, -> FirstName varchar(20) -> ); Query OK, 0 rows affected (0.52 sec)
2. 두 번째 테이블 생성
다음으로 INSERT 명령이 실행될 원본 테이블을 생성합니다.
mysql> create table DemoTable2 -> ( -> EmployeeId int, -> EmployeeName varchar(20) -> ); Query OK, 0 rows affected (0.51 sec)
3. 트리거 생성하기
이제 DemoTable2에 레코드가 삽입될 때마다 DemoTable1이 자동으로 업데이트되도록 AFTER INSERT 트리거를 생성합니다.
mysql> DELIMITER // mysql> CREATE TRIGGER updateDemoOnInsert -> AFTER INSERT ON DemoTable2 -> FOR EACH ROW BEGIN -> insert into DemoTable1 values(110,'Adam'); -> END -> // Query OK, 0 rows affected (0.14 sec) mysql> DELIMITER ;
주요 포인트:
AFTER INSERT ON DemoTable2: DemoTable2에 INSERT가 완료된 후 트리거가 실행됩니다.FOR EACH ROW: 삽입되는 각 행마다 트리거 로직이 수행됩니다.DELIMITER //: 세미콜론과 구분하기 위해 구분자를 임시로 변경한 후, 작업이 끝나면 기본값으로 되돌립니다.
4. 데이터 삽입 및 결과 확인
DemoTable2에 INSERT 명령으로 레코드를 추가해 보겠습니다.
mysql> insert into DemoTable2 values(101,'Mike'); Query OK, 1 row affected (0.22 sec)
SELECT 문으로 두 번째 테이블(DemoTable2)의 전체 레코드를 조회합니다.
mysql> select * from DemoTable2;
실행 결과는 다음과 같습니다.
+------------+--------------+ | EmployeeId | EmployeeName | +------------+--------------+ | 101 | Mike | +------------+--------------+ 1 row in set (0.00 sec)
이어서 첫 번째 테이블(DemoTable1)의 전체 레코드를 조회합니다.
mysql> select * from DemoTable1;
결과는 아래와 같습니다.
+------+-----------+ | Id | FirstName | +------+-----------+ | 110 | Adam | +------+-----------+ 1 row in set (0.00 sec)
정리
DemoTable2에는 직접 데이터를 넣지 않았지만, 트리거 덕분에 DemoTable1에 자동으로 (110, 'Adam') 레코드가 삽입된 것을 확인할 수 있습니다. 이처럼 MySQL 트리거를 활용하면 특정 테이블에 변경이 발생할 때 관련 테이블을 자동으로 갱신하는 등 복잡한 비즈니스 로직을 데이터베이스 차원에서 손쉽게 처리할 수 있습니다.