| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- AOP
- MVC
- frontController
- gradle
- springmvc
- springjdbc
- c:if
- @Valid
- application.properties
- 의존주입
- 바인딩변수
- @
- 생성자주입
- 비즈니스레이어
- produces
- .xml
- @ResponseBody
- 어노테이션
- after-throwing
- PointCut
- @RequestParam
- jointpoint
- Model
- spring
- Java
- SpringBoot
- 스프링
- 유효성검사
- @RequestMapping
- 서비스레이어
- Today
- Total
메모장
[DB] 트리거 본문
트리거 (Trigger): 트리거는 데이터베이스 내에서 데이터 변경 작업 (INSERT, UPDATE, DELETE)과 같은 DML(데이터 조작 언어)의 데이터 상태 관리를 자동화하는데 사용된다.
주로 데이터의 무결성 유지, 로깅, 오디팅 등의 목적으로 사용됩니다. 특정 테이블에 트리거를 정의하여 해당 테이블의 행이 추가, 변경 또는 삭제될 때 자동으로 실행됩니다. 주로 실시간 데이터 처리나 감시 등에 활용됩니다. 트리거의 동작은 해당 테이블의 데이터 조작과 연관되어 발생하며, 조심해서 사용해야 합니다.
트리거는 이와 같은 속성을 갖는다.
- BEFORE 또는 AFTER : 트리거가 실행되는 시기를 지정한다.
- INSTEAD OF : 트리거를 원래 문장 대신 수행한다.
- WHEN : 트리거를 시작하는 조건식을 지정한다.
일반적으로 트리거는 다음의 3 가지 경우에 시작된다. 트리거는 SELECT 문에 의한 데이터 검색에 영향을 미칠 수 없다.
- INSERT (새로운 행 삽입)
- UPDATE (기존 행의 변경) / UPDATE OF (기존 행의 특정 열 변경)
- DELETE (기존 행 삭제)
트리거의 장점
- 데이터 무결성 강화 ( 참조 무결성 )
- 업무 규칙의 설정
- 검사 기능의 확장
트리거의 단점
- 유지보수의 어려움
- 예상치 못한 오류
트리거 적용 Form
✔️ 트리거의 기본 형태
트리거는 [ BEFORE or AFTER ] 그리고 [ STATEMENT or ROW ] 에 따라서 총 4가지의 종류로 나눌 수 있다.
- BEFORE STATEMENT : SQL 구문이 실행되기 전에 그 문장에 대해 한 번 실행
- BEFORE ROW : SQL 구문이 실행되기 전에(DML 작업을 수행 전에) 각 행(ROW)에 대해 한 번씩 실행
- AFTER STATEMENT : SQL 구문이 실행된 후에 그 문장에 대해 한 번 실행
- AFTER ROW : SQL 구문이 실행된 후에(DML 작업을 수행한 후에) 각 행(ROW)에 대해 한 번씩 실행
STATEMENT는 DML로 테이블에 여러 행에 대한 데이터가 변경되더라도 오로지 DML 작업에 대한 트리거를 한 번만 실행한다는 것이다.
CREATE [ OR REPLACE ] TRIGGER 트리거명
[ BEFORE | AFTER ]
이벤트1 [ OR 이벤트2 [ OR 이벤트3 ] ] ON 테이블명 -- 장착되는 테이블
[ FOR EACH ROW [WHEN TRIGGER 조건] ]
[ DECLARE ]
-- 선언 구문
(...)
BEGIN
-- 실행 구문
(...)
END;
CREATE OR REPLACE TRIGGER '트리거명'
[선택 1 필수] BEFORE or AFTER -------------------------------> 트리거의 발생 시점, 보통 Before 를 많이 사용
[선택 1 이상 필수] DELETE OR INSERT OR UPDATE ON 테이블명
----> 3개를 선택해서 사용 (INSERT/UPDATE/DELETE)
[선택] REFERENCING NEW AS NEW OLD AS OLD ------------------> NEW , OLD 에 대한 alias 사용 가능,
[선택] FOR EACH ROW [statement] --------------> 생략될경우 statement 실행
--------------> statement : 해당 이벤트에 한번만 실행됨
[선택] WHEN (new.column = '~~') --------------> 트리거의 조건을 생성
[ DECLARE ] --- PL/SQL 구문
n number;
[ BEGIN ]
-- NEW : 새로 추가되거나 변경된 후의 값에 트리거가 적용된다.(INSERT : 입력할 값, UPDATE : 수정할 값)
-- OLD : 변경 전의 값에 트리거가 적용된다. (UPDATE : 수정 전 값, DELETE : 삭제할 값)
IF INSERTING THEN ~~ ; 라고 입력 시 ------> insert 이벤트 실행
ELSIF UPDATING THEN ~~ ; 라고 입력 시 ----> update 이벤트 실행
ELSIF DELETING THEN ~~ ; 라고 입력 시 ----> delete 이벤트 실행
END IF;
[ END; ]
'DB > 개념정리' 카테고리의 다른 글
| [ DB ] 오라클 프로시저 (PROCEDURE) (0) | 2024.04.10 |
|---|---|
| [ DB ] 이벤트 스케쥴러 (0) | 2024.04.10 |
| 유니크 키 (Unique Key) (0) | 2024.04.10 |
| Oracle DBMS ' NVL ' (0) | 2024.04.10 |
| WHERE 1=1 (0) | 2024.04.10 |