반응형
MySQL에서 대량 데이터를 삭제하거나 복잡한 삭제 로직을 실행할 때는 실수로 인해 중요한 데이터가 손실될 수 있다.
이러한 상황을 방지하고 안정적인 삭제 연산을 수행하기 위해 사용하는 것이 바로 트랜잭션(TRANSACTION)이다.
트랜잭션을 활용하면 삭제 작업을 원자적(atomic)으로 처리할 수 있어, 문제가 발생했을 때 ROLLBACK으로 복구가 가능하다.

🧠 트랜잭션이란?
트랜잭션(Transaction)은 데이터베이스에서 하나의 작업 단위를 묶는 기능이다.
START TRANSACTION으로 시작하고, COMMIT 또는 ROLLBACK으로 끝나는 구조를 가진다.
MySQL에서 InnoDB 스토리지 엔진을 사용하는 경우에만 트랜잭션 처리가 가능하다.
🧾 기본 트랜잭션 + DELETE 문 사용 예시
START TRANSACTION;
DELETE FROM orders WHERE status = 'CANCELED';
DELETE FROM order_items WHERE order_id NOT IN (SELECT id FROM orders);
COMMIT;
위 코드는 취소된 주문과 그에 따른 아이템 데이터를 함께 삭제한다.
중간에 문제가 발생하면 ROLLBACK을 통해 이전 상태로 복구할 수 있다.
반응형
⚠️ 예외 발생 시 복구: ROLLBACK 예제
START TRANSACTION;
DELETE FROM users WHERE email IS NULL;
-- 삭제 후 데이터 검증
SELECT COUNT(*) FROM users;
ROLLBACK;
ROLLBACK을 실행하면 DELETE로 삭제한 내용도 모두 복구된다.
중요 데이터 삭제 테스트 시 매우 유용하게 사용된다.
📌 트랜잭션 처리 흐름 요약
- START TRANSACTION으로 시작
- 여러 개의 DELETE 또는 복합 SQL 실행
- 문제 없으면 COMMIT, 문제 발생 시 ROLLBACK
🧪 실무에서의 활용 예시
- 회원 탈퇴 시 연관된 모든 정보 일괄 삭제 처리
- 정산 데이터를 삭제하고 그에 따른 통계 재계산 트리거 실행
- 오류 발생 시 이전 상태로 되돌리는 테스트 환경 구축
- 데이터 마이그레이션 중 삭제 연산과 삽입 연산을 묶어 처리
🛡️ 트랜잭션 사용 시 주의사항
- 반드시 InnoDB 테이블에서만 유효하며, MyISAM에서는 동작하지 않는다
- DELETE 전에 SELECT로 대상 레코드를 확인하는 습관이 필요하다
- 너무 많은 데이터를 한 번에 삭제하면 락이 오래 유지되므로 배치 처리 권장
DELETE FROM logs WHERE created_at < '2023-01-01' LIMIT 1000;
이와 같이 LIMIT을 활용하면 락을 줄이고 서버에 부담을 최소화할 수 있다.
🔍 실시간 문제 방지를 위한 자동 트랜잭션 처리
Spring 등 백엔드 프레임워크에서 트랜잭션을 자동 관리하는 경우가 많다.
이 경우는 직접 START TRANSACTION을 쓰기보다는, 프레임워크의 트랜잭션 어노테이션 등을 활용한다.
🔗 공식 문서 링크
반응형
'DB' 카테고리의 다른 글
| [MySQL] LOAD DATA INFILE로 대용량 데이터 빠르게 삽입하는 방법 ⚡ (0) | 2025.07.03 |
|---|---|
| [MySQL] DELETE 실패 원인과 해결책 총정리 🧯 (1) | 2025.07.02 |
| [MySQL] DELETE + JSON 조건으로 JSON 데이터 기반 삭제 처리하기 (0) | 2025.07.02 |
| [MySQL] DELETE + NULL 조건으로 누락 데이터 정리하기 🧹 (0) | 2025.07.02 |
| [MySQL] DELETE + EXISTS / IN 조건으로 정밀하고 안전하게 데이터 삭제하기 ✂️ (0) | 2025.07.02 |
| [MySQL] DELETE + 서브쿼리로 조건에 맞는 데이터만 정밀하게 삭제하는 방법 (0) | 2025.07.02 |
| [MySQL] DELETE + JOIN으로 두 테이블 이상에서 조건에 맞는 데이터 안전하게 삭제하는 방법 (0) | 2025.07.02 |
| [MySQL] DELETE + LIMIT / ORDER BY로 원하는 개수만 안전하게 삭제하는 방법 (2) | 2025.07.02 |