Programming/SQL

[SQL] 트리거 / 트리거 구동 / DDL트리거

reeme 2021. 1. 29. 13:41

트리거(trigger)

dbms에서 특정 사건이 발생시 자동으로 일련의 과정이 수행되는 프로시저


프로시저 vs 트리거

프로시저 : 사용자가 직접 exec 명령어를 이용하여 프로시저를 수행함
트리거 : 특정 조건을 만족하면 자동으로 수행되도록 하는 저장 프로시저
-> 특정 사건이 발생될 때만 실행되는 프로시저
-> 사용자가 트리거를 따로 호출할 필요가 없음

 

무결성과 트리거

트리거는 데이터의 변경이 발생될 때 수행됨
-> 데이터 변경 시 무결성에 문제가 발생되면 이를 보완할 수 있도록 자동으로 프로시저를 수행하도록 트리거를 정의해 놓으면 무결성을 유지시킬 수 있음
단점 : 테이블 선언시 정의한 제약조건에 비하여 성능이 저하됨
장점 : 프로시저와 더불어 데이터베이스 내에 업무 규칙을 구현할 수 있음

 


수행기점에 따른 트리거의 분류

after 트리거
이벤트(삽입/삭제/변경)발생 직후 실행되는 트리거
테이블에 대해서만 작성됨


before 트리거
이벤트(삽입/삭제/변경)발생 이전에 실행되는 트리거
일반적으로 before 트리거는 지원되지 않음


instead of 트리거
이벤트(삽입/삭제/변경)발생시 해당 이벤트 대신 구동되는 트리거
-> 다른 작업을 수행하는 트리거
instead of 트리거를 활용하여 before 트리거 같은 역할을 수행시킬 수 있음

 

inserted 와 deleted 테이블
트리거 작동시 생성되는 임시 테이블
-- 사건에 따라서 둘 중 하나 또는 둘 다 만들어짐

사건 inserted테이블 deleted테이블
삽입 방금 삽입 된 튜플이 복사됨  
변경 변경된 튜플이 복사됨 변경전 튜플을 보관함
삭제   방금 삭제된 튜플을 보관함

 

 


트리거의 구동

트리거 생성 문법

  CREATE TRIGGER 트리거명
  ON 테이블명
  [for / after / instead of] [insert / update / delete]
  AS
  SQL 문;

-- for 는 before와 같은 것임

-- ON 테이블에 의해 테이블에 내용이 추가 / 삭제되면 inserted 또는 deleted 라는

  가상 테이블에 자동으로 추가되고 이를 이용하여 트리거를 수행시키게 됨


DDL 트리거

create / alter / drop 과 같은 DDL문이 발생시 구동되는 트리거
DML트리거와 유사함
정의시 ON 테이블명 대신 ON DATABASE 를 사용함
INSTEAD OF 트리거는 지원안함

CREATE TRIGGER 트리거명
ON DATABASE
{FOR|AFTER} {DROP_TABLE|CREATE_TABLE|ALTER_TABLE}
AS SQL 문;

트리거의 변경과 삭제

  DROP TRIGGER 트리거명; 
  ALTER TRIGGER 트리거명;