DB

[MySQL] CREATE TRIGGER 완벽 가이드 사용법(트리거 생성)

인생아 2025. 1. 14. 23:37
반응형

MySQL CREATE TRIGGER는 데이터베이스에서 특정 이벤트가 발생할 때 자동으로 실행되는 SQL 코드를 정의하는 데 사용됩니다. 트리거는 데이터 무결성을 유지하고, 자동화된 작업을 실행하며, 로그 기록을 통해 데이터베이스 관리 작업을 효율적으로 처리할 수 있는 강력한 도구입니다.

CREATE TRIGGER란?

트리거(Trigger)는 특정 테이블에서 INSERT, UPDATE, 또는 DELETE와 같은 이벤트가 발생했을 때 자동으로 실행되는 SQL 코드입니다. 이를 통해 데이터 변경 시 자동화된 처리가 가능합니다. 예를 들어, 데이터 삽입 시 변경 내용을 기록하거나 값의 무결성을 유지하는 데 사용됩니다.

CREATE TRIGGER의 기본 문법

CREATE TRIGGER 트리거명
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON 테이블명
FOR EACH ROW
트리거내용;
  • 트리거명: 생성할 트리거의 이름입니다.
  • BEFORE | AFTER: 트리거가 실행되는 시점을 지정합니다.
    • BEFORE: 지정된 작업 전에 실행
    • AFTER: 지정된 작업 후에 실행
  • INSERT | UPDATE | DELETE: 트리거를 실행할 이벤트 유형입니다.
  • 테이블명: 트리거가 적용될 테이블입니다.
  • FOR EACH ROW: 테이블의 각 행에 대해 트리거가 실행됨을 나타냅니다.
  • 트리거내용: 실행될 SQL 문장입니다.
반응형

CREATE TRIGGER의 특징

  1. 자동화: 데이터베이스 작업이 특정 조건에서 자동으로 실행됩니다.
  2. 데이터 무결성 유지: 잘못된 데이터가 입력되지 않도록 보호합니다.
  3. 로그 기록: 테이블의 변경 내용을 기록할 수 있습니다.
  4. 다양한 이벤트 처리: 삽입, 수정, 삭제 이벤트에 대해 개별적으로 처리할 수 있습니다.

예제 1: 데이터 삽입 시 로그 기록

아래 예제는 직원 테이블에 데이터가 삽입될 때, 해당 작업을 로그 테이블에 기록하는 트리거입니다.

CREATE TABLE EmployeeLog (
    LogID INT AUTO_INCREMENT PRIMARY KEY,
    EmployeeName VARCHAR(100),
    ActionTime DATETIME
);

CREATE TRIGGER LogEmployeeInsert
AFTER INSERT ON Employee
FOR EACH ROW
BEGIN
    INSERT INTO EmployeeLog (EmployeeName, ActionTime)
    VALUES (NEW.Name, NOW());
END;
  • NEW: 새로 삽입된 데이터에 접근할 때 사용합니다.
  • NOW(): 현재 시간값을 가져옵니다.

예제 2: 데이터 업데이트 시 이전 값 저장

아래는 특정 데이터가 업데이트되기 전의 값을 기록하는 트리거입니다.

CREATE TABLE UpdateLog (
    LogID INT AUTO_INCREMENT PRIMARY KEY,
    OldValue VARCHAR(100),
    UpdatedAt DATETIME
);

CREATE TRIGGER LogBeforeUpdate
BEFORE UPDATE ON Employee
FOR EACH ROW
BEGIN
    INSERT INTO UpdateLog (OldValue, UpdatedAt)
    VALUES (OLD.Name, NOW());
END;
  • OLD: 변경되기 전의 데이터를 참조할 때 사용합니다.

예제 3: 데이터 삭제 시 알림 처리

데이터가 삭제될 때 알림 메시지를 생성하는 트리거입니다.

CREATE TABLE DeleteAlert (
    AlertID INT AUTO_INCREMENT PRIMARY KEY,
    DeletedRecord VARCHAR(100),
    DeletedAt DATETIME
);

CREATE TRIGGER AlertOnDelete
AFTER DELETE ON Employee
FOR EACH ROW
BEGIN
    INSERT INTO DeleteAlert (DeletedRecord, DeletedAt)
    VALUES (OLD.Name, NOW());
END;
반응형

트리거 관리 시 유의사항

  1. 트리거 중복 생성 방지: 동일한 이벤트에 대해 동일한 트리거를 여러 개 생성할 수 없습니다.
  2. 권한 요구: 트리거를 생성하려면 SUPER 권한이 필요할 수 있습니다.
  3. 성능 영향: 복잡한 트리거는 데이터 처리 성능에 영향을 미칠 수 있으므로 설계 시 신중해야 합니다.

트리거 삭제

트리거를 삭제하려면 DROP TRIGGER 명령어를 사용합니다.

DROP TRIGGER IF EXISTS LogEmployeeInsert;

트리거의 장점

  • 반복 작업 자동화: 특정 이벤트 발생 시 반복적으로 필요한 작업을 자동화할 수 있습니다.
  • 비즈니스 로직 강화: 데이터베이스 레벨에서 비즈니스 로직을 보장합니다.
  • 데이터 추적: 데이터 변경 내역을 쉽게 추적할 수 있습니다.

결론

MySQL의 CREATE TRIGGER는 데이터베이스 관리에서 효율성과 안정성을 높이는 데 필수적인 도구입니다. 트리거를 올바르게 사용하면 데이터 무결성을 유지하고 작업을 자동화할 수 있습니다.

MySQL 공식 문서를 참고 : https://dev.mysql.com/doc/

반응형