JAVAIARY

트리거 (TRIGGER) 본문

lectureNote/SQL

트리거 (TRIGGER)

shiherlis 2023. 7. 5. 22:36

1. 트리거

  • DBMS시스템에서 INSERT, UPDATE, DELETE등의 이벤트가 발생할 때마다
    관련 작업이 자동으로 수행되는 절차형 SQL
  • 트리거는 데이터베이스에 저장되며, 데이터 변경 및 무결성 유지, 로그메시지 출력 등의 목적으로 사용
  • 트리거의 구문에는 DCL(데이터 제어어)사용 불가
    DCL이 포함된 프로시저나 함수를 호출하는 경우에도 오류 발생
  • 트리거에 오류가 있는 경우 트리거가 처리하는 데이터에도 영향을 미치므로 
    트리거 생성 시 주의 필요

2. 트리거 구성

* 필수

DECLARE*
EVENT*
BEGIN*
    CONTROL
    SQL
    EXCEPTION
END*
  • DECLARE* : 트리거의 명칭, 변수 및 상수, 데이터 타입을 정의
  • EVENT* : 트리거가 실행되는 조건을 명시
  • BEGIN/END : 트리거의 시작과 종료 의미
  • CONTROL : 조건문 또는 반복문이 삽입되어 순차적으로 처리됨
  • SQL : DML문을 이용한 데이터 조회,추가, 수정, 삭제 작업 수행 (DML 외의 다른 구문 사용 불가)
  • EXCEPTION: BIGIN/END 구문 실행 중 예외 발생시 수행할 작업 

3. 트리거의 생성

CREATE(OR REPLACE) TRIGGER 트리거명 (동작시기 옵션)(동작 옵션) ON 테이블명
REFERENCING (NEW/OLD) AS 테이블명
FOR EACH ROW
(WHEN 조건식)
BEGIN 
트리거 BODY;
END;
  • OR REPLACE: 선택옵션 . 동일 이름의 트리거가 존재한다면 기존의 트리거르 대체(덮어씌움)
  • 동작시기 옵션 : 트리거가 실행될 때 지정 (AFTER, BEFORE)
    • AFTER: 테이블이 변경된 후에 트리거 실행
    • BEFORE : 테이블이 변경되기 전에 트리거 실행
  • 동작 옵션: 트리거가 실행되게 할 작업의 종류 지정 (INSERT, DELETE, UPDATE)
    • INSERT: 테이블에 새로운 튜플을 삽입할 때 트리거 실행
    • DELETE: 테이블의 튜플을 삭제할 때 트리거 실행
    • UPDATE: 테이블의 튜플을 수정할 때 트리거 실행
  •  NEW/OLD : 트리거가 적용될 테이블의 별칭을 지정함
    • NEW : 추가되거나 수정에 참여할 튜플들의 집합(테이블)
    • OLD : 수정되거나 삭제 전 대상이 되는 튜플들의 집합(테이블)
  • FOR EACH ROW : 각 튜플마다 트리거를 적용한다는 뜻
  • WHEN 조건식 : 선택옵션,. 트리거를 적용할 튜플의 조건 지정
  • 트리거 BODY : 트리거의 본문 코드. BEGIN/END  사이에 적어도 하나 이상의 SQL문 필요
CREATE TRIGGER 학년정보_TRI BEFORE INSERT ON 학생
REFERENCING NEW AS NEW_TABLE
FOR EACH ROW
WHEN (NEW_TABLE.학년 IS NULL)
BEGIN
	:NEW_TABLE.학년 := '신입생';
END;
  • :NEW_TABLE 
    • 속성 NEW 혹은 OLD로 지정해 준 테이블 앞에 항상 지정되어야 함
  • :=
    •  우변 값을 좌변에 할당

4. 트리거의 제거

DROP TRIGGER 트리거명;

'lectureNote > SQL' 카테고리의 다른 글

커서(Cursor)란?  (0) 2023.07.12
사용자 정의 함수  (0) 2023.07.09
프로시저 (PROCEDURE) 생성, 실행 , 삭제  (0) 2023.07.05
Oracle) NVL, UNION, OUTERJOIN표현식  (1) 2023.06.04
ibatis ) isNotEmpty 태그  (0) 2023.05.25