Notice
Recent Posts
Recent Comments
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total


관리 메뉴

JUST DO IT

[MSSQL] 트리거(TRIGGER) 사용법 본문

DATABASE/MSSQL

[MSSQL] 트리거(TRIGGER) 사용법

ROKIIIII 2024. 11. 27. 21:13

1. TRIGGER란?

 TRIGGER는 데이터베이스에서 특정 이벤트(예: INSERT, UPDATE, DELETE)가 발생했을 때 자동으로 실행되는 저장 프로시저입니다. 데이터 무결성을 유지하거나 특정 작업을 자동화하는 데 사용됩니다.

 

 * TRIGGER의 특징 *

  • 특정 테이블의 데이터 변경 이벤트에 반응.
  • INSERT, UPDATE, DELETE 작업 전이나 후에 실행.
  • 자동으로 실행되며, 명시적으로 호출할 수 없음.

2. TRIGGER의 유형

  (1) AFTER TRIGGER

     : 테이블에서 이벤트가 성공적으로 완료된 후 실행.
       주로 데이터 검증, 이력 기록 등에 사용.

  (2) INSTEAD OF TRIGGER

     : 이벤트 발생 시, 기본 작업 대신 트리거에 정의된 작업을 실행.
       주로 복잡한 데이터 검증이나 논리 작업을 처리하는 데 사용.

 

3. Trigger 활용

  (1) 우선 예제로 활용할 테이블을 만들어줍니다

CREATE TABLE Employees (
    EmployeeID INT IDENTITY PRIMARY KEY,
    EmployeeName NVARCHAR(100) NOT NULL,
    Position NVARCHAR(50),
    Salary INT
);

CREATE TABLE AuditLog (
    LogID INT IDENTITY PRIMARY KEY,
    Action NVARCHAR(50),
    EmployeeID INT,
    ActionDate DATETIME DEFAULT GETDATE()
);

 

  (2) AFTER INSERT 트리거 예제(테이블에 데이터가 삽입될때 기록)

CREATE TRIGGER trg_AfterInsert_Employees
ON Employees
AFTER INSERT
AS
BEGIN
    INSERT INTO AuditLog (Action, EmployeeID)
    SELECT 'INSERT', EmployeeID
    FROM INSERTED;
END;

 

  (3) 데이터 삽입과 트리거 실행 확인

INSERT INTO Employees (EmployeeName, Position, Salary)
VALUES ('홍길동', '개발자', 50000);

SELECT * FROM AuditLog;

 

  (4) INSTEAD OF TRIGGER 예제 (Salary 급여가 0보다 작은값이 들어가지 않도록하는 트리거)

CREATE TRIGGER trg_InsteadOfInsert_Employees
ON Employees
INSTEAD OF INSERT
AS
BEGIN
    -- 급여가 0 이상인 경우에만 삽입
    INSERT INTO Employees (EmployeeName, Position, Salary)
    SELECT EmployeeName, Position, Salary
    FROM INSERTED
    WHERE Salary >= 0;

    IF EXISTS (SELECT * FROM INSERTED WHERE Salary < 0)
    BEGIN
        PRINT '급여는 0보다 작을 수 없습니다.';
    END;
END;

 

  (5) 비정상적인 급여(0보다 작은)를 삽입하는 경우 트리거에 의해 아래와 같이 실행됩니다.

-- 비정상 데이터 삽입 (Salary가 0보다 작음)
INSERT INTO Employees (EmployeeName, Position, Salary)
VALUES ('박영희', '디자이너', -1000);

 

4. TRIGGER 확인과 삭제 ( ※TRIGGER는 수정이 안됩니다※ )

-- TRIGGER 확인
SELECT * FROM SYS.TRIGGERS;

-- TRIGGER 삭제
DROP TRIGGER 트리거 이름;

 

 

이렇게 MSSQL TRIGGER에대해 알아보았습니다.