Transaction(트랜잭션)

Soozoo·2024년 7월 10일

데이터베이스(DB)

목록 보기
12/19

트랜잭션의 기본 개념

트랜잭션은 데이터베이스 관리 시스템(DBMS)에서 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)의 ACID 특성을 보장합니다.

  1. 원자성(Atomicity)
    • 트랜잭션의 모든 작업이 성공적으로 완료되거나, 하나라도 실패하면 모든 작업이 취소되어야 합니다. 부분적인 실행은 허용되지 않습니다.
  2. 일관성(Consistency)
    • 트랜잭션이 완료되면 데이터베이스는 항상 일관성 있는 상태로 유지되어야 합니다. 데이터 무결성 제약 조건이 항상 유지되어야 합니다.
  3. 고립성(Isolation)
    • 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 고립되어야 합니다. 하나의 트랜잭션이 완료될 때까지 다른 트랜잭션의 중간 상태를 볼 수 없습니다.
  4. 지속성(Durability)
    • 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 데이터베이스에 저장되어야 합니다. 시스템 장애가 발생하더라도 데이터는 보존되어야 합니다.

트랜잭션 관리 명령어

트랜잭션을 관리하기 위한 기본적인 SQL 명령어는 다음과 같습니다:

  • BEGIN 또는 START TRANSACTION: 트랜잭션의 시작을 명시합니다.
  • COMMIT: 트랜잭션을 완료하고 모든 변경 사항을 영구적으로 저장합니다.
  • ROLLBACK: 트랜잭션을 취소하고 모든 변경 사항을 원래 상태로 되돌립니다.

트랜잭션 예제 스크립트

-- 빈 테이블 c_emp100 생성
CREATE TABLE c_emp100 AS
    SELECT * FROM emp WHERE 1=0;

-- c_emp100 테이블 내용 확인
SELECT * FROM c_emp100;

-- 트랜잭션 시작
BEGIN
    FOR i IN 1..10000 LOOP
        INSERT INTO c_emp100
            SELECT * FROM emp;
    END LOOP;
END;

-- c_emp100 테이블 내용 확인
SELECT * FROM c_emp100;

-- 전체 변경사항 저장
COMMIT;

-- 전체 변경사항 취소 (이전 커밋으로 돌아가기 때문에 실제 효과 없음)
ROLLBACK;

-- 데이터 업데이트 및 삭제
UPDATE c_emp100 SET sal = 1000;
DELETE FROM c_emp100 WHERE deptno = 20;
UPDATE c_emp100 SET sal = 200 WHERE deptno = 30;
UPDATE c_emp100 SET sal = 100 WHERE deptno = 10;

-- 특정 데이터 업데이트
UPDATE c_emp100 SET sal = 888 WHERE deptno = 10;

-- 저장점 설정
SAVEPOINT update_sal;

-- 추가 데이터 업데이트
UPDATE c_emp100 SET sal = 99 WHERE deptno = 30;

-- 또 다른 저장점 설정
SAVEPOINT update_sal_30;

-- 현재 상태 확인
SELECT * FROM c_emp100;
SELECT SUM(sal) FROM c_emp100;

-- 첫 번째 저장점으로 롤백
ROLLBACK TO SAVEPOINT update_sal;

-- 롤백 후 상태 확인
SELECT * FROM c_emp100;
SELECT SUM(sal) FROM c_emp100;

단계별 설명

  1. 테이블 생성 및 초기 데이터 확인:

    CREATE TABLE c_emp100 AS
        SELECT * FROM emp WHERE 1=0;
    SELECT * FROM c_emp100;
    

    c_emp100 테이블을 emp 테이블과 동일한 구조로 생성합니다. 처음에는 데이터가 없습니다.

  2. 트랜잭션 시작 및 데이터 삽입:

    BEGIN
        FOR i IN 1..10000 LOOP
            INSERT INTO c_emp100
                SELECT * FROM emp;
        END LOOP;
    END;
    

    c_emp100 테이블에 emp 테이블의 데이터를 10000번 반복하여 삽입합니다.

  3. 변경사항 저장 및 확인:

    SELECT * FROM c_emp100;
    COMMIT;
    

    c_emp100 테이블의 데이터를 확인하고, 변경사항을 저장합니다.

  4. 변경사항 취소:

    ROLLBACK;
    

    COMMIT 이후의 변경사항을 취소합니다. 실제로는 영향이 없습니다.

  5. 데이터 업데이트 및 삭제:

    UPDATE c_emp100 SET sal = 1000;
    DELETE FROM c_emp100 WHERE deptno = 20;
    UPDATE c_emp100 SET sal = 200 WHERE deptno = 30;
    UPDATE c_emp100 SET sal = 100 WHERE deptno = 10;
    
  6. 특정 데이터 업데이트 및 저장점 설정:

    UPDATE c_emp100 SET sal = 888 WHERE deptno = 10;
    SAVEPOINT update_sal;
    UPDATE c_emp100 SET sal = 99 WHERE deptno = 30;
    SAVEPOINT update_sal_30;
    
  7. 현재 상태 확인 및 저장점으로 롤백:

    SELECT * FROM c_emp100;
    SELECT SUM(sal) FROM c_emp100;
    ROLLBACK TO SAVEPOINT update_sal;
    SELECT * FROM c_emp100;
    SELECT SUM(sal) FROM c_emp100;
    

    update_sal 저장점으로 롤백하여 이후 변경사항을 취소합니다.

profile
넙-죽

0개의 댓글