728x90
1. 트리거란?
특정 테이블에서 INSERT, DELETE, UPDATE와 같은 DML문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램
👉 사용자가 직접 호출하는 것이 아니라, DB에서 자동적으로 호출
- 예: 상품을 주문했을 때 자동으로 배송 내역으로 들어가는 것, 회원가입 했을 때 웰컴 쿠폰이 자동으로 발급되는 것
- 테이블에 부착되는 프로그램 코드
- IN, OUT 매개 변수 사용 가능
2. 트리거의 유형
- 행 트리거: 테이블 안의 영향을 받는 행 각각에 대해 실행됨
변경 전 또는 변경 후의 행은 OLD, NEW라는 가상 줄 변수를 사용하여 읽을 수 있음
트리거 이벤트 | OLD | NEW |
INSERT | X | O |
UPDATE | O | O |
DELETE | O | X |
- 문장 트리거: INSERT, UPDATE, DELETE문에 대해 한 번만 실행됨
3. 트리거의 속성
- BEFORE 또는 AFTER: 트리거가 실행되는 시기를 정함
- after 트리거: 쿼리 이벤트 작동하기 전
- before 트리거: 쿼리 이벤트 작동하기 전에 미리 데이터를 확인 가능
- INSTEAD OF: 트리거를 원래 문장 대신 수행함
- WHEN: 트리거를 시작하는 조건식을 수행함
4. 트리거가 실행되는 경우
- INSERT
- UPDATE
- DELETE
5. 트리거의 장단점
장점
- 데이터 무결성 강화(참조 무결성)
: 두 테이블 간의 관계를 유지하거나 제약 조건 준수하는 등의 작업을 자동 처리 - 업무 규칙의 설정
: 애플리케이션 코드에서 비즈니스 규칙을 반복해서 구현할 필요 없이 DB에서 관리할 수 있음
단점
- 유지보수의 어려움
: 남용 시 DB 스키마와 애플리케이션 결합도가 증가하여 시스템 전체의 이식성 저하 - 예상치 못한 오류를 유발할 수 있음
: 여러 트리거가 상호작용할 때 예상치 못한 결과 발생 가능
6. 트리거와 프로시저의 차이점
- 프로시저: 사용자가 미리 명령어를 저장해서 사용자가 실행하면 실행이 됨
- 트리거: 특정 조건이 만족되면, 자동으로 저장되었던 명령어가 실행됨
- 트리거 이벤트가 실행된 테이블을 트리거를 통해 수정하려 하면 에러가 발생할 수 있음
- 👉 재귀적 트리거 호출 때문. 트리거가 특정 이벤트를 발생시킬 때 다시 같은 테이블의 데이터를 수정하려고 하면 무한 루프에 빠지게 됨 👉 데이터베이스에 부하를 줄 수 있음
- 트리거는 매 이벤트마다 동일하게 처리하여 적용하는 경우 사용하고 프로시저는 그렇지 않은 경우에 사용함
- 예) 통신사가 회원 등급을 결정할 때 사용 비용을 기준으로 처리하기 때문에 회원 등급을 결정하는 처리를 트리거가 아닌 프로시저로 해야 함
참고
https://github.com/devSquad-study/2023-CS-Study/blob/main/DB/db_trigger.md
'Computer Science > DB' 카테고리의 다른 글
[DB] B-tree, B+tree (0) | 2024.04.01 |
---|---|
[DB] 인덱스 index (0) | 2024.04.01 |
[DB] 저장 프로시저 Stored Procedure, SP (0) | 2024.03.27 |
[DB] 스키마 (1) | 2024.03.26 |
[DB] RDBMS와 NoSQL (1) | 2024.03.18 |