Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 트리거 실행 중 오류 발생 시 처리 방식 완벽 정리

```html

MySQL은 트리거 실행 중 오류를 어떻게 처리할까?

트리거(Trigger) 실행 도중 오류가 발생하면, MySQL은 미리 정의된 규칙에 따라 일관성 있게 이를 처리합니다. BEFORE 트리거와 AFTER 트리거의 동작 방식, 그리고 테이블 유형에 따른 롤백 여부까지 이해하면 데이터 무결성을 더 안전하게 관리할 수 있습니다.

트리거 오류 처리의 기본 규칙

  • BEFORE 트리거가 실패하는 경우: 해당 행(row)에 대한 작업 자체가 수행되지 않습니다.
  • BEFORE 트리거의 활성화 시점: 행을 삽입하거나 수정하려는 시도가 있으면, 그 시도가 최종적으로 성공할지 여부와 관계없이 BEFORE 트리거가 먼저 활성화됩니다.
  • AFTER 트리거의 실행 조건: AFTER 트리거는 모든 BEFORE 트리거와 실제 행 작업이 성공적으로 완료된 경우에만 실행됩니다.
  • 오류 발생 시 전체 문장 실패: BEFORE 또는 AFTER 트리거 어느 쪽에서든 오류가 발생하면, 그 트리거를 호출한 SQL 문장 전체가 실패로 처리됩니다.

트랜잭션 테이블과 비트랜잭션 테이블의 차이

오류 발생 후의 결과는 사용하는 테이블 유형에 따라 달라집니다.

트랜잭션 테이블(InnoDB 등): 문장이 실패하면 해당 문장이 수행한 모든 변경 사항이 롤백(rollback)됩니다. 트리거의 실패는 곧 문장의 실패를 의미하므로, 트리거 오류 역시 변경 사항 전체의 롤백으로 이어집니다. 덕분에 데이터는 오류 발생 이전 상태로 깨끗하게 복원됩니다.

비트랜잭션 테이블(MyISAM 등): 이러한 롤백이 불가능합니다. 따라서 문장 자체는 실패로 기록되더라도, 오류가 발생한 지점 이전까지 이미 수행된 변경 사항은 그대로 데이터베이스에 남게 됩니다. 이 경우 부분적인 데이터 변경이 남아 있을 수 있으므로 주의가 필요합니다.

정리

MySQL에서 트리거 오류는 단순히 트리거만 실패하는 것이 아니라, 이를 호출한 전체 문장의 실패로 확장됩니다. 특히 데이터 무결성이 중요한 서비스라면 InnoDB와 같은 트랜잭션 테이블을 사용해 오류 발생 시 자동 롤백이 이루어지도록 설계하는 것이 안전합니다.