Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 트리거(TRIGGER)로 INSERT 발생 시 다른 테이블 자동 업데이트하는 방법

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 트리거를 활용하면 특정 테이블에 변경이 발생할 때 관련 테이블을 자동으로 갱신하는 등 복잡한 비즈니스 로직을 데이터베이스 차원에서 손쉽게 처리할 수 있습니다.