데이터베이스에서 트랜잭션(Transaction)은 데이터의 일관성과 안정성을 보장하는 데 중요한 역할을 합니다. 데이터 변경 작업을 묶어서 실행하거나, 오류 발생 시 이전 상태로 되돌릴 수 있는 기능을 제공합니다.
이번 글에서는 트랜잭션의 개념과 COMMIT, ROLLBACK의 활용 방법을 살펴보겠습니다.


1. 트랜잭션의 개념

트랜잭션이란?

  • 트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위를 의미합니다. 여러 작업을 하나의 단위로 묶어서 실행하며, 데이터의 일관성(Consistency)을 보장합니다.

트랜잭션은 다음 4가지 특성을 만족해야 합니다(ACID 특성)

Atomicity (원자성) 작업이 모두 성공하거나, 전혀 수행되지 않은 상태를 보장해야 합니다.
Consistency (일관성) 작업 전후 데이터가 일관성 있는 상태를 유지해야 합니다.
Isolation (격리성) 트랜잭션 간의 작업이 서로 영향을 주지 않도록 독립적으로 수행되어야 합니다.
Durability (내구성) 트랜잭션이 성공적으로 완료되면 결과가 영구적으로 반영되어야 합니다.

트랜잭션의 실행 흐름

  1. 트랜잭션 시작 (START TRANSACTION 또는 BEGIN).
  2. 작업 수행 (INSERT, UPDATE, DELETE 등).
  3. 결과를 확정(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 윈도우 함수를 다뤄보겠습니다.

'SQL > 학습정리' 카테고리의 다른 글

SQL 복합 쿼리  (0) 2024.12.14
SQL 서브쿼리  (0) 2024.12.12
SQL Join  (0) 2024.12.11
SQL 집계함수  (0) 2024.12.10
SQL 기본 문법 2  (0) 2024.12.09

+ Recent posts