데이터베이스에서 트랜잭션(Transaction)은 데이터의 일관성과 안정성을 보장하는 데 중요한 역할을 합니다. 데이터 변경 작업을 묶어서 실행하거나, 오류 발생 시 이전 상태로 되돌릴 수 있는 기능을 제공합니다.
이번 글에서는 트랜잭션의 개념과 COMMIT, ROLLBACK의 활용 방법을 살펴보겠습니다.
1. 트랜잭션의 개념
트랜잭션이란?
- 트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위를 의미합니다. 여러 작업을 하나의 단위로 묶어서 실행하며, 데이터의 일관성(Consistency)을 보장합니다.
트랜잭션은 다음 4가지 특성을 만족해야 합니다(ACID 특성)
Atomicity (원자성) | 작업이 모두 성공하거나, 전혀 수행되지 않은 상태를 보장해야 합니다. |
Consistency (일관성) | 작업 전후 데이터가 일관성 있는 상태를 유지해야 합니다. |
Isolation (격리성) | 트랜잭션 간의 작업이 서로 영향을 주지 않도록 독립적으로 수행되어야 합니다. |
Durability (내구성) | 트랜잭션이 성공적으로 완료되면 결과가 영구적으로 반영되어야 합니다. |
트랜잭션의 실행 흐름
- 트랜잭션 시작 (START TRANSACTION 또는 BEGIN).
- 작업 수행 (INSERT, UPDATE, DELETE 등).
- 결과를 확정(COMMIT)하거나 취소(ROLLBACK)하여 완료.
2. COMMIT과 ROLLBACK
COMMIT
- 작업을 완료하고 데이터 변경 사항을 데이터베이스에 영구적으로 반영합니다.
- COMMIT 이후에는 트랜잭션의 변경 사항을 되돌릴 수 없습니다.
문법
COMMIT;
ROLLBACK
- 작업 도중 오류가 발생하거나 취소해야 할 경우, 데이터 변경 사항을 트랜잭션 시작 이전 상태로 되돌립니다.
- 트랜잭션 내에서만 사용 가능합니다.
문법
ROLLBACK;
예제
1. 트랜잭션 시작 후 COMMIT
- 계좌에 $1,000을 추가하고 $100을 차감한 작업을 COMMIT으로 확정합니다.
START TRANSACTION;
INSERT INTO Account (AccountId, Balance) VALUES (1, 1000);
UPDATE Account
SET Balance = Balance - 100
WHERE AccountId = 1;
COMMIT;
2. 트랜잭션 시작 후 ROLLBACK
- 작업 도중 오류가 발생한 경우, ROLLBACK으로 모든 변경 사항을 취소합니다.
START TRANSACTION;
INSERT INTO Account (AccountId, Balance) VALUES (2, 500);
UPDATE Account SET Balance = Balance + 100
WHERE AccountId = 2;
ROLLBACK;
SAVEPOINT
- 트랜잭션 내에서 특정 지점을 저장하여 부분적으로 롤백할 수 있는 기능입니다.
문법
SAVEPOINT savepoint_name;
ROLLBACK TO savepoint_name;
예제
START TRANSACTION;
INSERT INTO Account (AccountId, Balance) VALUES (3, 1000);
SAVEPOINT sp1;
UPDATE Account SET Balance = Balance - 200 WHERE AccountId = 3;
SAVEPOINT sp2;
ROLLBACK TO sp1; -- sp1 이후의 작업을 취소
COMMIT;
3. 자동 커밋 (Auto-Commit)
MySQL에서는 기본적으로 자동 커밋(Auto-Commit) 모드가 활성화되어 있습니다.
자동 커밋 모드에서는 각 쿼리가 실행될 때마다 자동으로 COMMIT이 수행됩니다.
자동 커밋 끄기
SET autocommit = 0; -- 자동 커밋 비활성화
START TRANSACTION;
INSERT INTO Account (AccountId, Balance) VALUES (4, 200);
COMMIT; -- 명시적으로 COMMIT 실행
자동 커밋 다시 활성화
SET autocommit = 1;
4. 요약
- 트랜잭션: 데이터를 안전하게 처리하기 위해 여러 작업을 하나의 단위로 묶습니다.
- COMMIT: 작업을 완료하고 변경 사항을 영구적으로 저장합니다.
- ROLLBACK: 작업 중단 시 변경 사항을 취소하고 이전 상태로 복원합니다.
- SAVEPOINT: 트랜잭션 내 특정 지점을 저장하여 부분적으로 롤백할 수 있습니다.
- 자동 커밋: MySQL 기본 설정으로, 명시적인 트랜잭션 관리가 필요하면 Auto-Commit을 비활성화합니다.
SQL 트랜잭션은 데이터 무결성을 보장하며, 특히 중요한 데이터를 다룰 때 필수적인 도구입니다.
다음 글에서는 SQL 윈도우 함수를 다뤄보겠습니다.