본문 바로가기
공부 및 교육/정보처리기사 실기 이론

트리거(TRIGGER)- 트리거의 구성도, 트리거 표기형식, 트리거 삭제

by whooops 2023. 2. 26.
반응형

트리거(TRIGGER)

트리거는 데이터베이스 시스템에서 데이터의 삽입(INSERT), 갱신(UPDATE), 삭제(DELETE)등의 이벤트(EVENT)가 발생할 때 관련 작업이 자동으로 수행되도록 하는 절차형 SQL입니다.

트리거
트리거

- 트리거는 데이터베이스에 저장되며, 데이터 변경 및 무결성 유지, 로그 메시지 출력 등의 목적으로 사용됩니다.

- 트리거의 구문에는 DCL(데이터 제어어)을 사용할 수 없으며, DCL이 포함된 프로시저나 함수를 호출하는 경우에 오류가 발생합니다.

*이벤트(EVENT) : 이벤트는 시스템에 어떤 일이 발생한 것을 말하며, 트리거에서 이벤트는 데이터의 삽입, 갱신, 삭제와 같이 데이터 조작 작업이 발생했음을 의미합니다.

*무결성(INTEGRITY) : 무결성은 데이터베이스에 들어 있는 데이터의 정확성을 보장하기 위해 정확하지 않은 데이터가 데이터베이스 내에 저장되는 것을 방지하기 위한 제약 조건을 말합니다.

*로그 메세지 출력: 사용자가 컴퓨터에 요청한 명령이나 컴퓨터가 데이터를 처리하는 과정 및 결과 등을 기록으로 남긴 것을 로그라고 하며, 이것을 메시지로 출력할 때 트리거를 이용할 수 있습니다.

 

 

◆트리거의 구성도

이벤트 → 트리거 → 데이터 변경

 

[트리거]

DECLARE(필수)

EVENT(필수)

BEGIN(필수)

   -CONTROL

   -SQL

   -EXCEPTION

END(필수)


1. DECLARE : 트리거의 명칭, 변수 및 상수, 데이터 타입을 정의하는 선언부이다.

2. EVENT : 트리거가 실행되는 조건을 명시한다.

3. BEGIN / END : 트리거의 시작과 종료를 의미한다.

4. CONTROL : 조건문 또는 반복문이 삽입되어 순차적으로 처리된다.

5. SQL : DML문이 삽입되어 데이터 관리를 위한 조회, 추가, 수정, 삭제 작업을 수행한다.

6. EXCEPTION : BEGIN~END 안의 구문 실행 시 예외가 발생하면 이를 처리하는 방법을 정의한다.

 

 

 

 

 

◇트리거의 생성

트리거를 생성하기 위해서는 CREATE TRIGGER 명령어를 사용한다.


<표기형식>

CREATE [OR REPLACE] TRIGGER 트리거명 [ 동작시기 옵션 ] [동작 옵션] ON 테이블명

REFERENCING [NEW/ OLD] AS 테이블명

FOR EACH ROW

[WHEN 조건식]

BEGIN

     트리거 BODY;

END;


- OR REPLACE : 선택적인(Optional)예약어이다. 이 예약어를 사용하면 동일한 트리거 이름이 이미 존재하는 경우, 기존의 트리거를 대체할 수 있다.

- 동작시기 옵션 : 트리거가 실행 될 때를 지정한다.

*AFTER - 테이블이 변경된 후에 트리거가 실행 / BEFORE - 테이블이 변경되기 전에 트리거가 실행

 

- 동작 옵션 : 트리거가 실행되게 할 작업의 종류를 지정한다.

INSERT(새로운 튜플 삽입), DELETE(튜플 삭제), UPDATE(튜플 수정)

 

- NEW/OLD : 트리거가 적용 될 테이블의 별칭을 지정한다.

NEW - 추가되거나 수정에 참여할 튜픙들의 집합(테이블)을 의미한다.

OLD - 수정되거나 삭제 전 대상이 되는 튜플들의 집합(테이블)을 의미한다.

 

- FOR EACH ROW : 각 튜플마다 트리거를 적용한다는 의미이다.

 

- WHEN 조건식 : 선택적인 예약어로 트리거를 적용할 튜플의 조건을 지정한다.

 

- 트리거 BODY

*트리거의 본문 코드를 입력하는 부분

*BEGIN으로 시작해서 END로 끝나는데, 적어도 하나 이상의 SQL문이 있어야 한다. 그렇지 않으면 오류가 발생한다.

 

 

 

◇트리거의 제거

트리거를 제거하기 위해서는 DROP TRIGGER 명령어를 사용한다.

 

DROP TRIGGER 트리거명;

 

*트리거는 데이터가 변경될 때 자동으로 수행되므로 호출문이 존재하지 않습니다.

 

반응형

댓글