트랜잭션 개념과 ACID 특성 (Concept of Transactions and ACID Properties)
트랜잭션의 개념 (Concept of Transactions)
트랜잭션은 데이터베이스에서 하나의 논리적 작업 단위를 이루는 일련의 SQL 문장들을 말합니다. 모든 SQL 문장이 성공적으로 완료되거나, 그렇지 않으면 전혀 수행되지 않은 것처럼 처리되어야 합니다.
ACID 특성 (ACID Properties)
트랜잭션은 데이터베이스 시스템에서 다음과 같은 ACID 특성을 충족해야 합니다:
원자성 (Atomicity)
트랜잭션의 모든 연산이 완전히 수행되거나 전혀 수행되지 않아야 합니다. 이를 통해 트랜잭션 중 일부만 수행되는 일이 없도록 합니다.
일관성 (Consistency)
트랜잭션이 완료되면 데이터베이스는 일관된 상태를 유지해야 합니다. 즉, 트랜잭션 수행 전과 후에 데이터베이스는 항상 일관된 상태여야 합니다.
고립성 (Isolation)
각 트랜잭션은 다른 트랜잭션으로부터 독립적으로 수행되어야 합니다. 동시에 여러 트랜잭션이 수행되더라도 각각의 트랜잭션은 다른 트랜잭션의 중간 상태를 보지 않아야 합니다.
지속성 (Durability)
트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 데이터베이스에 반영되어야 합니다. 시스템 장애가 발생하더라도 트랜잭션의 결과는 보존됩니다.
트랜잭션 제어문 (Transaction Control Statements: BEGIN, COMMIT, ROLLBACK)
BEGIN (트랜잭션 시작)
Oracle에서는 트랜잭션을 명시적으로 시작하는 BEGIN 문이 필요하지 않습니다. 첫 번째 SQL 문이 실행될 때 트랜잭션이 자동으로 시작됩니다.
COMMIT (트랜잭션 완료)
COMMIT 문은 트랜잭션이 성공적으로 완료되었음을 데이터베이스에 알리고, 트랜잭션 동안 수행된 모든 변경 사항을 영구적으로 저장합니다.
COMMIT;
예제:
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10; COMMIT;
이 예제에서는 부서 ID가 10인 모든 직원의 급여를 10% 인상하고, COMMIT을 통해 변경 사항을 영구적으로 저장합니다.
ROLLBACK (트랜잭션 취소)
ROLLBACK 문은 현재 트랜잭션 동안 수행된 모든 변경 사항을 취소하고, 데이터베이스를 트랜잭션 시작 전 상태로 되돌립니다.
ROLLBACK;
예제:
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10; ROLLBACK;
이 예제에서는 부서 ID가 10인 모든 직원의 급여를 10% 인상한 후, ROLLBACK을 통해 변경 사항을 취소하고 원래 상태로 되돌립니다.
트랜잭션 제어의 예제 (Examples of Transaction Control)
INSERT와 COMMIT
INSERT INTO employees (employee_id, first_name, last_name, department_id, salary) VALUES (207, 'John', 'Doe', 20, 5000); COMMIT;
이 예제에서는 새 직원을 employees
테이블에 추가한 후 COMMIT을 통해 변경 사항을 영구적으로 저장합니다.
UPDATE와 ROLLBACK
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 20; ROLLBACK;
이 예제에서는 부서 ID가 20인 모든 직원의 급여를 10% 인상한 후, ROLLBACK을 통해 변경 사항을 취소합니다.
DELETE와 COMMIT
DELETE FROM employees WHERE employee_id = 207; COMMIT;
이 예제에서는 employee_id
가 207인 직원을 employees
테이블에서 삭제한 후 COMMIT을 통해 변경 사항을 영구적으로 저장합니다.
SAVEPOINT (저장점)
SAVEPOINT 문은 트랜잭션 내에서 특정 지점을 지정합니다. 이후 ROLLBACK TO SAVEPOINT 문을 사용하여 지정된 지점까지 변경 사항을 취소할 수 있습니다.
SAVEPOINT savepoint_name;
예제:
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10; SAVEPOINT sp1; UPDATE employees SET salary = salary * 1.2 WHERE department_id = 20; ROLLBACK TO sp1; COMMIT;
이 예제에서는 부서 ID가 10인 모든 직원의 급여를 10% 인상한 후, 저장점을 설정하고 부서 ID가 20인 모든 직원의 급여를 20% 인상합니다. 이후 ROLLBACK TO sp1을 통해 두 번째 변경 사항을 취소하고, 첫 번째 변경 사항만 COMMIT합니다.
트랜잭션 제어문을 사용하여 데이터베이스 작업을 안전하고 일관되게 수행할 수 있습니다. 트랜잭션의 ACID 특성을 이해하고 적절하게 활용하면, 데이터 무결성을 유지하면서 효율적인 데이터 처리를 할 수 있습니다.