MySQL에서 **트리거(Trigger)**는 INSERT, UPDATE, DELETE 같은 DML문이 실행될 때 자동으로 실행되는 객체입니다.
그런데 트리거가 서로 연결되어 실행되는 경우를 **중첩 트리거(Nested Trigger)**라고 부릅니다.
예를 들어:
- 주문 테이블(orderTbl)에 새로운 주문이 들어오면 → 재고 테이블(prodTbl)의 수량 차감
- 재고가 변경되면 → 배송 테이블(deliverTbl)에 배송 내역 자동 등록
이런 흐름을 중첩 트리거로 구현할 수 있습니다.
트리거 실행은 하나의 트랜잭션이다
트리거는 독립적으로 실행되지 않고, 원래 실행된 DML문과 같은 트랜잭션 맥락에서 실행됩니다.
즉,
- INSERT INTO orderTbl ... 실행
- → orderTrg 실행 (재고 차감)
- → prodTrg 실행 (배송 등록)
이 모든 과정은 하나의 트랜잭션 단위로 묶입니다.
롤백 동작
중첩 트리거 중 하나라도 오류가 발생하면 어떻게 될까요?
- 하나라도 실패 → 전체 롤백
- orderTbl에 넣은 주문, prodTbl 재고 차감, deliverTbl 배송 등록까지 모두 취소됩니다.
예:
- 주문 INSERT → 성공
- 재고 UPDATE → 성공
- 배송 INSERT → 컬럼 오류 발생 🚫
👉 결과: 주문/재고/배송 모두 롤백, 아무 데이터도 반영되지 않음
정리
- 중첩 트리거는 하나의 트랜잭션으로 동작한다.
- 트리거 체인 중 하나라도 실패하면 전체 롤백된다.
- 덕분에 **데이터 일관성(Consistency)**이 보장된다.
한줄 결론
중첩 트리거는 자동화에 강력한 도구이지만, 하나의 트랜잭션으로 묶이기 때문에 중간 반영은 불가능하고, 하나의 에러 = 전체 롤백임을 꼭 기억해야 합니다.
'컴퓨터 과학 > 데이터 베이스' 카테고리의 다른 글
| MySQL에서 SELECT ... INTO 구문 이해하기 (1) | 2025.08.28 |
|---|---|
| MySQL 트리거: BEFORE vs AFTER (0) | 2025.08.23 |
| MySQL 중첩 트리거(Nested Trigger) 예제: 주문 → 재고 차감 → 배송 등록 자동화 (0) | 2025.08.23 |
| MySQL 커서는 어디서 사용할 수 있을까? (1) | 2025.08.23 |
| MySQL 커서(Cursor) 이해하기: 고객 키 평균 구하기 예제 (0) | 2025.08.23 |