COMMIT / ROLLBACK —
확정하거나 되돌리기
사진 편집 앱에서 밝기를 바꿨습니다. 화면으로 결과를 확인한 뒤 마음에 들면 저장하고, 잘못 바꿨다면 취소하죠. 데이터를 바꿀 때도 같은 선택을 할 수 있습니다 — 먼저 바꿔 보고, 확인한 뒤 결정하는 흐름입니다.
이번 섹션의 여정
완료 ✓
완료 ✓
지금 여기
잠금 · 종합 실습
트랜잭션 시작하기
MySQL은 보통 자동 커밋 상태로 씁니다. 변경 SQL이 끝나면 결과가 바로 확정된다는 뜻이에요.
하지만 여러 작업을 확인한 뒤 직접 결정하고 싶을 때는 이렇게 시작합니다.
자동 커밋 설정을 따로 끌 필요 없어요. START TRANSACTION 으로 시작한 작업은
COMMIT 이나 ROLLBACK 을 만날 때 끝납니다.
가격을 잠시 바꿔 봅니다
무선 이어폰(product_id = 9) 한 행으로 흐름을 확인해 볼게요. 가격을 1,000원 올린 뒤 바뀐 결과를 조회합니다.
| product_id | product_name | price |
|---|---|---|
| 9 | 무선 이어폰 | 90000 |
지금 조회 결과가 바뀌었다고 해서 작업이 끝난 것은 아닙니다. 이 시점에 확인해야 할 것이 있어요.
WHERE 를 빠뜨리면 테이블의 모든 행이 바뀝니다. UPDATE products SET price = price + 1000; 이라고만 쓰면 상품 30개 가격이 전부 오릅니다. 트랜잭션 안에서
작업하면 이런 실수를 되돌릴 수 있다는 게 오늘의 핵심이에요.
두 가지 끝 — COMMIT과 ROLLBACK
확인이 끝나면 둘 중 하나를 선택합니다.
| 명령 | 뜻 | 언제 |
|---|---|---|
| COMMIT | 변경을 최종 확정한다 | 결과가 맞을 때 |
| ROLLBACK | 아직 확정하지 않은 변경을 취소한다 | 실수했거나 조건이 맞지 않을 때 |
가격을 정말 올리려던 상황이라면 COMMIT을 실행합니다. 그러면 90,000원이 최종 값으로 남아요.
하지만 오늘은 명령의 흐름을 확인하려고 잠시 바꾼 것이므로 ROLLBACK을 선택하겠습니다.
ROLLBACK 결과 확인하기
| product_id | product_name | price |
|---|---|---|
| 9 | 무선 이어폰 | 89000 |
롤백은 지금 트랜잭션에서 아직 커밋하지 않은 변경만 되돌립니다. 이미 커밋해 끝낸 과거 작업까지 되돌리는 명령이 아닙니다.
트랜잭션은 반드시 끝내세요
트랜잭션을 시작했다면 결과만 확인하고 그대로 두어서는 안 됩니다.
끝내지 않은 작업은 확정되지 않은 상태로 남고, 7-2에서 봤듯 다른 작업을 기다리게 만들 수도 있습니다.
SQL 한 줄에서 오류가 났다고 해서 앞의 변경까지 언제나 자동으로 취소되는 것은
아닙니다. 문제가 생겼다면 ROLLBACK 이 실제로 실행됐는지 확인하세요.
한눈에 정리
| 명령 | 하는 일 |
|---|---|
| START TRANSACTION | 지금부터의 변경을 하나의 작업으로 묶는다 |
| COMMIT | 변경을 최종 확정하고 트랜잭션을 끝낸다 |
| ROLLBACK | 미확정 변경을 취소하고 트랜잭션을 끝낸다 |
| 되돌릴 수 있는 범위 | 현재 트랜잭션의 커밋하지 않은 변경만 |
| 끝내지 않으면 | 미확정 상태로 남아 다른 작업을 막을 수 있다 |
트랜잭션은 시작하고 → 변경하고 → 확인한 뒤 → 확정하거나 되돌리는 순서로 씁니다.