반응형
트리거란?
트리거(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 트리거는 시스템 자동화를 위한 강력한 도구입니다. 다만 너무 많은 책임을 트리거에 부여하기보다는 로그 작성이나 간단한 제어용도로 사용하는 것이 좋습니다.
필요할 때 잘만 활용하면, 운영 중 수작업 없이 깔끔하게 데이터를 관리할 수 있답니다.
반응형
'MS-SQL' 카테고리의 다른 글
MSSQL 인덱싱된 뷰로 성능 최적화하는 방법 (1) | 2025.08.08 |
---|---|
MSSQL 뷰(View) 완벽 정리: 개념부터 실전까지 (2) | 2025.08.07 |
MS-SQL 연결된 서버(Linked Server) 설정방법 2 (0) | 2025.04.04 |
MS-SQL 연결된 서버(Linked Server) 설정방법 (0) | 2025.04.04 |
MS-SQL 사용자 정의 테이블 (0) | 2024.11.26 |