transaction.sql
트랜잭션 ( transaction )
- 데이터베이스 내에서 하나의 그룹으로 처리되어야 하는 명령문들을 모아 놓은 작업 단위입니다
- 여러개의 데이터베이스 작업을 하나의 작업 단위로 묶어 처리하며,
모든 작업이 성공적이면 완료 처리하거나,
하나라도 실패할 경우에는 취소하여 이전 상태로 되돌립니다.
- 특징 (ACID 속성)
원자성 ( Atomicity)
: 트랜잭션 내외 모든 작업은 하나로 처리해서, 모두 성공하거나 실패해야 합니다
일관성( Consistency )
: 트랜잭션이 완료되면 데이터베이스는 일관된 상태를 유지해야 합니다
격리성( Isolation )
: 동시에 실행되는 트랜잭션은 서로 영향을 주지않아야 합니다
지속성( Durability )
: 트랜잭션이 성공적으로 완료되면 해당 결과는 영구적으로 반영되어야 합니다.
트랙재션 명령어
- COMMIT
ROLLBACK
SAVEPOINT
COMMIT
- 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어 입니다.
- 트랜잭션의 처리 과정을 데이터베이스에 반영하기 위해서 변경된 내용을 모두 영구 저장합니다
- COMMIT 을 수행하면 하나의 트랜잭션 과정을 왼료하게 됩니다.
-- 항상 데이터베이스 작업을 할때 백업을 해둡니다!
ROLLBACK
- 작업중 문제가 발생했을 때,
트랜잭션의 처리 과정에서 발생한 변경 사항을 취소하고 트랜잭션 과정을 종료합니다.
- 이전 COMMIT 한 곳까지만 복구됩니다.
-- 연습테이블
DROP TABLE dept01 PURGE;
CREATE TABLE dept01 AS SELECT * FROM dept;
SELECT * FROM dept01;
-- dept01 테이블내용 삭제
DELETE FROM dept01;
SELECT * FROM dept01;
-- ROLLBACK 을 수행해서 데이터 복구
ROLLBACK;
SELECT * FROM dept01;
-- 부선번호 20번 삭제
DELETE FROM dept01
WHERE deptno = 20;
SELECT *FROM dept01;
-- 데이터 삭제한 결과를 영구 저장하기 위해서 COMMIT 수행
COMMIT;
COMMIT 을 수행 하면 영구 저장이 된다
Auto COMMIT
- DDL 문( create, alter, drop, ...) 은 자동으로 COMMIT 을 진행합니다
-- ROLLBACK 명령문을 실행했지만 DDL 문이 먼저 수행되면서, 자동 COMMIT 이 진행되어 복구 되지 않습니다
SAVEPOINT
- 현재의 트랜잭션을 분할 하느 명령어 입니다.
- 트랜잭션 내에 특정 지점을 표시하는 기능으로, 이를 통해서 원하는 지점으로 ROLLBACK 할 수 있습니다.
- 저장된 SAVEPOINT 는 'ROLLBACK TO SAVEPOINT' 문을 사용해서, 표시한 곳까지 ROLLBACK 할 수 있습니다.
- 연습 테이블 생성
DROP TABLE dept01 PURGE;
CREATE TABLE dept01 AS SELECT * FROM dept;
SELECT * FROM dept01;
--40번 부서 삭제 -> COMMIT
DELETE FROM dept01 WHERE deptno=40;
COMMIT;
SELECT * FROM dept01;
-- 20번 부서 삭제 -> SAVEPOINT D20
DELETE FROM dept01 WHERE deptno=20;
SELECT * FROM dept01;
SAVEPOINT D20;
--10번 부서 삭제
DELETE FROM dept01 WHERE deptno=10;
SELECT * FROM dept01;
--ROLLBACK
ROLLBACK TO D20;
SELECT * FROM dept01;
20번은 롤백이 되지 않습니다