안녕하세요! 😊
오늘은 SQL을 공부하면서 꼭 알아야 할 COMMIT
이라는 개념에 대해 쉽게 풀어보려고 합니다.
데이터베이스를 다룰 때 자주 보게 되는 이 단어, 과연 어떤 의미일까요?
COMMIT
은 한마디로 말하면 "지금까지의 변경사항을 확정해서 데이터베이스에 저장해!" 라는 뜻이에요.
예를 들어, 우리가 은행 앱을 만든다고 가정해볼게요.
UPDATE accounts SET balance = balance - 1000 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 1000 WHERE account_id = 2;
이 두 줄은 A 계좌에서 1000원을 빼고, B 계좌에 1000원을 더하는 코드예요. 하지만 이 중 하나만 실행되고 다른 하나는 실패하면 어떻게 될까요?
👉 A의 돈은 빠졌는데 B에게는 안 들어가는 데이터 오류가 생기겠죠. 😱
그래서 이런 여러 개의 작업을 하나의 덩어리(=트랜잭션) 로 묶고, 다 성공했을 때만 저장(=COMMIT)하는 거예요.
간단히 말하면,
여러 개의 작업을 하나처럼 묶어서 처리하는 것
입니다.
그리고 트랜잭션은 보통 이렇게 구성됩니다:
BEGIN; -- 트랜잭션 시작
... -- 여러 작업 (INSERT, UPDATE, DELETE 등)
COMMIT; -- 저장 (확정!)
ROLLBACK; -- 되돌리기 (취소!)
기능 | 설명 |
---|---|
데이터 확정 | 지금까지의 작업 결과를 데이터베이스에 영구 저장 |
작업 단위 | 여러 SQL 문을 하나의 논리적 작업으로 묶음 |
안전성 | 오류나 실패 상황에서 데이터 일관성을 지킴 |
BEGIN;
UPDATE products SET stock = stock - 1 WHERE id = 101;
UPDATE orders SET status = 'paid' WHERE order_id = 555;
COMMIT;
위 작업이 모두 성공하면 COMMIT
을 실행해서 주문이 정상적으로 처리됩니다.
만약 중간에 오류가 났다면?
ROLLBACK;
을 실행해서 아무 일도 없던 것처럼 원상복구할 수 있어요.
어떤 데이터베이스(예: MySQL 기본 설정)는 각 SQL 문이 실행될 때마다 자동으로 COMMIT해버립니다.
그럴 경우 ROLLBACK
이 안 되기 때문에, 중요한 작업에서는 자동 커밋을 꺼두고 수동으로 COMMIT/ROLLBACK을 하는 게 좋습니다.
SQL에서 명령어(COMMIT
)를 쓰지 않아도 데이터가 DB에 저장되는 경우가 있었는데요. 이게 아까 위에서 설명한 "자동 커밋(Auto-Commit)"이라는 기능 때문이었습니다.
SQL 문이 실행되자마자 자동으로 COMMIT되는 기능입니다.
즉, INSERT
, UPDATE
, DELETE
같은 문장을 실행하면, 별도로 COMMIT
을 하지 않아도 그 결과가 즉시 DB에 반영됩니다.
아래와 같은 상황에서는 자동으로 COMMIT이 발생해요:
MySQL: 기본값이 자동 커밋 모드입니다.
INSERT
, UPDATE
, DELETE
등을 실행하면 자동으로 커밋됩니다.SQLite: 대부분의 명령이 자동 커밋됩니다, 다만 BEGIN TRANSACTION
으로 명시하면 수동 커밋으로 전환됨.
Oracle, PostgreSQL 등은 기본적으로 자동 커밋이 아님.
👉 일부 도구(예: DBeaver, SQL Developer, MySQL Workbench)도 자체 설정으로 자동 커밋이 켜져 있을 수 있어요.
DDL = Data Definition Language
테이블을 만들거나 구조를 바꾸는 명령어
CREATE TABLE users (...);
DROP TABLE orders;
ALTER TABLE products ADD COLUMN category VARCHAR(100);
위와 같은 명령은 대부분의 데이터베이스에서 자동으로 COMMIT됩니다.
이때는 트랜잭션으로 되돌릴 수 없어요.
자동 커밋이 켜진 상태에서는 ROLLBACK이 소용없을 수 있어요.
DELETE
)하면 복구가 불가능할 수 있습니다.대규모 수정 작업이나 중요한 처리는 되도록 수동으로 COMMIT/ROLLBACK을 관리하는 것이 안전합니다.
COMMIT
은 데이터베이스에 변경 내용을 저장하는 명령어ROLLBACK
으로 취소 가능상황 | 자동 COMMIT 여부 |
---|---|
MySQL 기본 설정 | ✅ 자동 커밋 |
DDL 문 실행 (CREATE, DROP 등) | ✅ 자동 커밋 |
명시적 트랜잭션 없이 SQL 실행 | ✅ 대부분 자동 커밋 |
BEGIN으로 트랜잭션 시작한 경우 | ❌ 수동 커밋 필요 |
PostgreSQL 등 트랜잭션 기반 DB | ❌ 수동 커밋 필요 |