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 트리거명;