트리거(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 트리거명;
'Programming > SQL' 카테고리의 다른 글
[SQL/실습] 트리거 (0) | 2021.01.29 |
---|---|
[SQL] 무결성 규정 (0) | 2021.01.29 |
[SQL/실습] 프로시저 실습 (0) | 2020.12.20 |
[SQL] 프로시저의 매개변수 / 출력매개변수 (0) | 2020.12.20 |
[SQL] 저장프로시저와 사용자정의함수 (0) | 2020.12.18 |