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

MySQL 트리거로 첫 번째 테이블에 데이터 삽입 시 두 번째 테이블에 자동으로 레코드 추가하기

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 트리거를 사용하면 애플리케이션 코드 없이도 데이터베이스 차원에서 테이블 간 연동 로직을 손쉽게 구현할 수 있습니다.