본문 바로가기

MS-SQL

초보도 이해하는 MSSQL 트리거 사용법 (실무 예제 포함)

반응형

트리거란?

트리거(Trigger)는 특정 테이블에 INSERT, UPDATE, DELETE 같은 DML 이벤트가 발생할 때 자동으로 실행되는 저장 프로시저입니다.

쉽게 말해, 테이블에 무언가 변경되면 자동으로 작동하는 감시자라고 볼 수 있어요.

 

트리거 언제 쓰나요?

  • 변경 이력을 자동으로 저장할 때 (ex. Audit 로그)
  • 데이터 무결성 유지 (ex. 잘못된 삭제 방지)
  • 연관 테이블 자동 처리 (ex. 재고 차감 등)

 

트리거 기본 구조

CREATE TRIGGER 트리거명
ON 테이블명
AFTER INSERT, UPDATE, DELETE -- 또는 INSTEAD OF
AS
BEGIN
    -- 트리거 실행 시 동작할 SQL 문
END

 

실무 예제: 회원 정보 수정 시 로그 남기기

1. 테이블 준비

-- 회원 테이블
CREATE TABLE Members (
    MemberID INT PRIMARY KEY,
    Name NVARCHAR(50),
    Email NVARCHAR(100)
);

-- 로그 테이블
CREATE TABLE MemberLogs (
    LogID INT IDENTITY(1,1) PRIMARY KEY,
    MemberID INT,
    OldEmail NVARCHAR(100),
    NewEmail NVARCHAR(100),
    ChangeDate DATETIME DEFAULT GETDATE()
);

 

2. 트리거 만들기

 

CREATE TRIGGER trg_MemberEmailUpdate
ON Members
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    IF UPDATE(Email)
    BEGIN
        INSERT INTO MemberLogs (MemberID, OldEmail, NewEmail)
        SELECT
            i.MemberID,
            d.Email AS OldEmail,
            i.Email AS NewEmail
        FROM inserted i
        JOIN deleted d ON i.MemberID = d.MemberID;
    END
END;

 

설명

  • inserted: UPDATE 후의 데이터
  • deleted: UPDATE 전의 데이터
  • IF UPDATE(컬럼명): 해당 컬럼이 수정된 경우만 처리

삭제 방지 트리거 예제

 
CREATE TRIGGER trg_PreventDelete
ON Members
INSTEAD OF DELETE
AS
BEGIN
    PRINT '회원 데이터는 삭제할 수 없습니다.';
END;

 

트리거 주의사항

  • 트리거는 자동 실행되므로 예기치 않은 동작을 할 수 있어요.
  • 무한 루프에 주의하세요. 트리거 내부에서 다시 트리거 대상 테이블을 건드리는 경우.
  • 너무 많은 로직을 넣으면 성능 저하 위험.

 

트리거 확인 & 삭제

-- 확인
SELECT * FROM sys.triggers;

-- 삭제
DROP TRIGGER trg_MemberEmailUpdate;

마무리 요약

항목설명

 

 

사용 시기 테이블 변경 감지 및 자동 작업 수행 시
핵심 키워드 AFTER, INSTEAD OF, inserted, deleted
주의할 점 과도한 로직, 무한 루프, 성능 이슈
 

결론

MSSQL 트리거는 시스템 자동화를 위한 강력한 도구입니다. 다만 너무 많은 책임을 트리거에 부여하기보다는 로그 작성이나 간단한 제어용도로 사용하는 것이 좋습니다.

필요할 때 잘만 활용하면, 운영 중 수작업 없이 깔끔하게 데이터를 관리할 수 있답니다.

 

 

반응형