여러 변경을 전부 성공하거나 전부 취소합니다.
BEGIN과 COMMIT 사이 작업은 하나의 논리 단위가 되며 문제가 생기면 ROLLBACK합니다. 원자성만으로 동시성 문제가 모두 해결되지는 않아 격리 수준과 잠금도 이해해야 합니다.
트랜잭션은 짧게 유지하고 외부 API 호출이나 사용자 입력 대기를 내부에 두지 않습니다.
오류를 잡고 ROLLBACK하지 않은 연결을 pool에 반환하면 다음 요청까지 열린 트랜잭션이 남을 수 있습니다.
트랜잭션 격리 수준 기본값이 다릅니다 — MariaDB는 REPEATABLE READ, PostgreSQL은 READ COMMITTED를 기본으로 쓰고, SQLite는 파일 잠금 방식이라 개념이 조금 다릅니다.
각 SQL 문이 자동 커밋된다고 가정하면 송금처럼 두 변경 사이 실패에서 데이터가 어긋납니다.
직접 바꿔보세요두 계좌 사이 3000원을 이체하고 잔액 합계가 유지되는지 확인하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.