▶ TRIGGER(트리거)
- 내가 지정한 테이블에 INSERT, UPDATE, DELETE등의 DML문에 의해 변경사항이 생길 때(테이블에 특정 이벤트가 발생했을 때) 자동으로 매번 실행할 내용을 미리 정의해둘 수 있는 객체
예시)
- 회원탈퇴시 기존의 회원테이블에 데이터 DELETE후 곧바로 탈퇴된 회원들만 따로 보관하는 테이블에 자동으로 INSERT처리해야 될 때
- 신고 횟수가 일정수를 넘었을 때 묵시적으로 해당 회원을 블랙리스트 처리되게끔 한다거나
- 입출고에 대한 데이터가 기록(INSERT)될 때마다 해당 상품에 대한 재고수량을 매번 수정(UPDATE)해야 될 때
■ 트리거의 종류
● SQL문의 시행시기에 따른 분류
- BEFORE TRIGGER : 내가 지정한 테이블에 이벤트(INSERT, UPDATE, DELETE)가 발생되기 전에 트리거 실행
- AFTER TRIGGER : 내가 지정한 테이블에 이벤트(INSERT, UPDATE, DELETE)가 발생된 후 트리거 실행
● SQL문에 의해 영향을 받는 각 행에 따른 분류
- STATEMENT TRIGGER(문장트리거) : 이벤트가 발생한 SQL문에 대해 딱 한번만 트리거 실행
- ROW TRIGGER(행 트리거) : 해당 SQL문이 실행될때마다 매번 트리거 실행
- :OLD - BEFORE UPDATE(수정된 자료), BEFORE DELETE(삭제전 자료)
- :NEW - AFTER INSERT(추가된 자료) , AFTER UPDATE(수정후 자료)
■ 트리거의 생성 구문
[표현식]
CREATE OR REPLACE TRIGGER 트리거명
BEFORE|AFTER INSERT|UPDATE|DELETE ON 테이블명
[FOR EACH ROW] -- 행트리거로 설정
DECLARE
변수선언;
BEGIN
실행내용(해당 위에 지정된 이벤트 발생시 자동으로 실행할 구문)
EXCEPTION
END;
/
ex)
-- EMPLOYEE 테이블에 새로운 행이 INSERT될때마다 자동으로 메세지가 출력되는 트리거 정의
CREATE OR REPLACE TRIGGER TRG_01
AFTER INSERT ON EMPLOYEE
BEGIN
DBMS_OUTPUT.PUT_LINE('신입사원님 환영합니다.');
END;
/
■ 트리거의 장점
- 데이터 추가, 수정, 삭제시 자동으로 데이터 관리를 해줌으로써 무결성보장
- 데이터베이스 관리의 자동화
■ 트리거의 단점
- 빈번한 추가, 수정, 삭제시 ROW의 삽입, 추가, 삭제가 함께 실행되므로 성능상 좋지 못하다.
- 관리적 측면에서 형상관리가 불가능하기 때문에 관리하기가 불편하다. (중요)
- 트리거를 남용하게 되는 경우 예상치 못한 사태가 발생할 수 있으며 유지보수가 힘들다.
'DB' 카테고리의 다른 글
DB (15) OBJECT(PROCEDURE, FUNCTION) (0) | 2023.06.15 |
---|---|
DB (14) PL/SQL (0) | 2023.06.14 |
DB (13) OBJECT(INDEX) (0) | 2023.06.13 |
DB (12) OBJECT(SEQUENCE) (2) | 2023.06.13 |
DB (11) OBJECT (0) | 2023.06.13 |