데이터베이스/ORACLE

Oracle 트랜잭션 관리 쉽게 이해하기: START TRANSACTION, COMMIT, ROLLBACK 활용법

CodeCaine Explorer 2024. 12. 20. 12:21
728x90
반응형
SMALL

1️⃣ START TRANSACTION

  • Oracle:
    Oracle에서는 명시적으로 START TRANSACTION 명령어를 사용하지 않습니다.
    대신, SQL 문을 실행하면 자동으로 트랜잭션이 시작됩니다.
    즉, INSERT, UPDATE, DELETE 같은 DML 문이 실행되면 트랜잭션이 시작됩니다.

  • 다른 DB (MySQL):
    MySQL에서는 명시적으로 트랜잭션을 시작하기 위해 START TRANSACTION을 사용해야 합니다.

    START TRANSACTION;
    INSERT INTO table_name VALUES (...);
    COMMIT;

🧐 주요 차이점

Oracle은 트랜잭션을 자동으로 시작하며, 별도의 명령어가 필요 없다는 점에서 MySQL, PostgreSQL 등과 다릅니다.


2️⃣ COMMIT

  • Oracle:
    Oracle에서는 COMMIT 명령어를 사용하여 현재 트랜잭션의 변경 사항을 영구적으로 저장합니다.

    INSERT INTO table_name VALUES (...);
    COMMIT;
  • 다른 DB:
    대부분의 RDBMS에서 COMMIT의 기능은 동일합니다.

🧐 주요 차이점

Oracle은 DDL 명령어 (CREATE, DROP, ALTER)를 실행할 때 자동으로 COMMIT이 발생합니다.
반면, MySQL에서는 이 동작이 기본적으로 비활성화되어 있거나 트랜잭션 처리 방식에 따라 다릅니다.


3️⃣ ROLLBACK

  • Oracle:
    ROLLBACK 명령어는 트랜잭션 내에서 실행된 모든 작업을 취소합니다.
    예를 들어:

    INSERT INTO table_name VALUES (...);
    ROLLBACK;

    이 경우, 해당 트랜잭션의 변경 사항은 무효화됩니다.

  • 다른 DB:
    MySQL, PostgreSQL 등에서도 ROLLBACK의 동작은 동일합니다.

🧐 주요 차이점

Oracle에서는 특정 시점으로 복구하기 위해 SAVEPOINT를 사용할 수 있습니다.
MySQL이나 PostgreSQL에서도 가능하지만, Oracle의 SAVEPOINT는 더 세부적인 트랜잭션 관리가 가능합니다.


4️⃣ SAVEPOINT

  • Oracle:
    SAVEPOINT를 사용하면 트랜잭션의 특정 지점을 설정할 수 있습니다.
    이후, ROLLBACK TO SAVEPOINT를 사용하여 해당 지점까지 복구할 수 있습니다.

    SAVEPOINT sp1;
    INSERT INTO table_name VALUES (...);
    ROLLBACK TO sp1;
  • 다른 DB:
    MySQL, PostgreSQL에서도 SAVEPOINT를 사용할 수 있지만 Oracle만큼 일반적으로 사용되지는 않습니다.

🧐 주요 차이점

Oracle은 SAVEPOINT를 자주 활용하여 복잡한 트랜잭션을 관리할 수 있으며, 높은 데이터 일관성을 보장합니다.


💡 주요 차이점 요약

기능 Oracle MySQL/PostgreSQL
트랜잭션 시작 자동 시작 (DML 실행 시) START TRANSACTION 명령어 필요
COMMIT DDL 실행 시 자동으로 COMMIT 발생 기본적으로 DDL에 대해 자동 COMMIT 발생 안 함
ROLLBACK 동일 (트랜잭션 취소) 동일
SAVEPOINT 지원 (ROLLBACK TO SAVEPOINT 가능) 동일하지만 Oracle에서 더 많이 활용됨

🔧 실전 예제 (Oracle)

-- 트랜잭션 시작 (DML 문 실행 시 자동 시작)
INSERT INTO employees (id, name) VALUES (101, 'John');

-- SAVEPOINT 설정
SAVEPOINT before_bonus;

-- 또 다른 작업
UPDATE employees SET salary = salary + 1000 WHERE id = 101;

-- 특정 시점으로 롤백
ROLLBACK TO before_bonus;

-- 최종적으로 변경 사항 저장
COMMIT;

응원 메시지 😊

트랜잭션은 데이터의 일관성을 유지하는 데 정말 중요한 요소예요. 처음에는 다소 복잡하게 느껴질 수 있지만, 천천히 연습하다 보면 쉽게 익숙해질 수 있답니다! 💪

반응형
SMALL