DML 트리거 이해

MicrosoftSQL Server에서는 비즈니스 규칙과 데이터 무결성 적용을 위한 두 가지 주요 메커니즘인 제약 조건과 트리거를 제공합니다. 트리거는 언어 이벤트가 실행될 때 자동으로 적용되는 특별한 유형의 저장 프로시저입니다. SQL Server에는 세 가지 일반 유형의 트리거인 DML 트리거, DDL 트리거 및 로그온 트리거가 있습니다.

서버나 데이터베이스에서 DDL(데이터 정의 언어) 이벤트가 발생하면 DDL 트리거가 호출됩니다. 자세한 내용은 DDL 트리거에서 설명합니다. LOGON 트리거는 LOGON 이벤트에 대한 응답으로 저장 프로시저를 실행합니다. 이 이벤트는 SQL Server 인스턴스에 사용자 세션이 설정된 경우 발생합니다. 자세한 내용은 LOGON 트리거를 참조하십시오.

DML 트리거는 데이터베이스에서 DML(데이터 조작 언어) 이벤트가 발생할 때 호출됩니다. DML 이벤트에는 지정한 테이블이나 뷰의 데이터를 수정하는 INSERT, UPDATE 또는 DELETE 문이 포함됩니다. DML 트리거는 다른 테이블을 쿼리할 수 있고 복잡한 Transact-SQL 문을 포함할 수 있습니다. 트리거 및 트리거를 시작하는 문은 트리거 내에서 롤백할 수 있는 단일 트랜잭션으로 처리됩니다. 디스크 공간 부족 등의 심각한 오류가 발견되면 전체 트랜잭션이 자동으로 롤백됩니다.

다음과 같은 방법으로 DML 트리거를 사용할 수 있습니다.

  • DML 트리거는 데이터베이스의 관련 테이블을 통해 변경 내용을 연계할 수 있습니다. 그러나 연계 참조 무결성 제약 조건을 사용하면 보다 효율적으로 변경 작업을 실행할 수 있습니다.

  • DML 트리거는 악의적이거나 잘못된 INSERT, UPDATE 및 DELETE 작업으로부터 보호하며 CHECK 제약 조건으로 정의하는 것보다 복잡한 다른 제약 조건을 적용합니다.

    CHECK 제약 조건과 달리 DML 트리거는 다른 테이블의 열을 참조할 수 있습니다. 예를 들어 트리거는 다른 테이블에서 SELECT 문을 사용하여 삽입되거나 업데이트된 데이터와 비교하고 데이터 수정 또는 사용자 정의 오류 메시지 표시 등의 추가 동작을 수행할 수 있습니다.

  • 데이터 수정 전후의 테이블 상태를 평가하고 이 차이점에 따라 동작을 수행할 수도 있습니다.

  • 테이블에 같은 유형(INSERT, UPDATE 또는 DELETE)의 DML 트리거를 여러 개 만들면 같은 수정 문이 실행될 때 여러 다른 동작을 실행할 수 있습니다.