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: 데이터 삽입 시 로그 기록
아래 예제는 직원 테이블에 데이터가 삽입될 때, 해당 작업을 로그 테이블에 기록하는 트리거입니다.
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;
트리거 관리 시 유의사항
- 트리거 중복 생성 방지: 동일한 이벤트에 대해 동일한 트리거를 여러 개 생성할 수 없습니다.
- 권한 요구: 트리거를 생성하려면 SUPER 권한이 필요할 수 있습니다.
- 성능 영향: 복잡한 트리거는 데이터 처리 성능에 영향을 미칠 수 있으므로 설계 시 신중해야 합니다.
트리거 삭제
트리거를 삭제하려면 DROP TRIGGER 명령어를 사용합니다.
DROP TRIGGER IF EXISTS LogEmployeeInsert;
트리거의 장점
- 반복 작업 자동화: 특정 이벤트 발생 시 반복적으로 필요한 작업을 자동화할 수 있습니다.
- 비즈니스 로직 강화: 데이터베이스 레벨에서 비즈니스 로직을 보장합니다.
- 데이터 추적: 데이터 변경 내역을 쉽게 추적할 수 있습니다.
결론
MySQL의 CREATE TRIGGER는 데이터베이스 관리에서 효율성과 안정성을 높이는 데 필수적인 도구입니다. 트리거를 올바르게 사용하면 데이터 무결성을 유지하고 작업을 자동화할 수 있습니다.
MySQL 공식 문서를 참고 : https://dev.mysql.com/doc/
'DB' 카테고리의 다른 글
[MySQL] CREATE TABLE AS 완벽 가이드 사용법(데이터를 조회하여 테이블 생성) (1) | 2025.01.15 |
---|---|
[MySQL] CREATE SPATIAL INDEX 완벽 가이드 사용법(공간인덱스) (0) | 2025.01.15 |
[MySQL] SET CHARACTER SET 완벽 가이드 사용법(캐릭터셋 설정) (0) | 2025.01.15 |
[MySQL] DROP TRIGGER 완벽 가이드 사용법(트리거 삭제) (0) | 2025.01.15 |
[MySQL] DROP PROCEDURE 완벽 가이드 사용법(프로시저 삭제) (0) | 2025.01.08 |
[MySQL] CREATE PROCEDURE 완벽 가이드 사용법(프로시저 생성) (0) | 2025.01.08 |
[MySQL] DROP FUNCTION 완벽 가이드 사용법(함수 삭제) (0) | 2025.01.08 |
[MySQL] CREATE FUNCTION 완벽 가이드 사용법(함수 생성) (0) | 2025.01.08 |