트랜잭션(transaction)
- 데이터 처리의 한 단위를 말함
- 오라클에서 발생하는 여러 개의 SQL 명령문들을 하나의 논리적인 작업 단위로 처리하는 것
- ALL OR NOTHING 방식으로 처리.
- 명령어 여러 개의 집합이 정상적으로 처리가 되면 종료.
- 여러 개의 명령어 중에서 하나의 명령이라도 잘못되면 전체 취소.
- 트랙잭션 사용 이유 : 데이터의 일관성을 유지하면서 데이터의 안정성을 보장하기 위해 사용.
트랙잭션 사용 시 트랜잭션 제어하기 위한 명령어
1) COMMIT : 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어.
- 트랜잭션(INSERT, UPDATE, DELETE) 작업 내용을 실제 DB에 반영. 이전에 있던 데이터에 UPDATE 현상 발생.
- 모든 사용자가 변경된 데이터의 결과를 볼 수 있음.
2) ROLLBACK : 작업 중에 문제가 발생했을 때 트랙잭션 처리 과정에서 발생한 변경사항을 취소하여 이전 상태로 되돌리는 명령어.
- 트랜잭션(INSERT, UPDATE, DELETE) 작업 내용을 취소함. 이전에 COMMIT한 곳까지만 복구 됨.
-- 1. DEPT 테이블을 참조하여 DEPT_01 테이블을 복사해보자.
CREATE TABLE DEPT_O1
AS
SELECT * FROM DEPT;
-- 2. DEPT_01 테이블의 내용을 삭제해보자.
DELETE FROM DEPT_O1;
-- 3. 이때 만일 부서번호가 20번인 부서에 대해서만 삭제하고 싶었는데 잘못해서 전체가 삭제된 경우,
-- 데이터가 삭제되어 찾을 수가 없음.
-- 따라서 ROLLBACK 명령어를 사용하면 되돌릴 수 있음.
ROLLBACK;
-- 4. 20번 부서만 삭제해보자.
DELETE FROM DEPT_O1 WHERE DEPTNO = 20;
-- DB에 반영
COMMIT;
■ SAVAPOINT : 트랜잭션을 작게 분할하는 것
- 사용자가 트랜잭션 중간 단계에서 포인트를 지정하여 트랜잭션 내의 특정 SAVEPOINT까지 ROLLBACK을 할 수 있게 하는 것
-- 1. DEPT 테이블을 복사하여 DEPT_02테이블을 만들어 보자.
CREATE TABLE DEPT_02
AS
SELECT * FROM DEPT;
-- 2. DEPT_02 테이블에서 40번 부서를 삭제한 후에 COMMIT을 해보자.
DELETE FROM DEPT_02 WHERE DEPTNO = 40;
COMMIT;
-- 3. DEPT_02 테이블에서 30번 부서를 삭제해보자.
DELETE FROM DEPT_02 WHERE DEPTNO = 30;
-- 4. 이 때 SAVEPOINT C1을 설정해 보자.
SAVEPOINT C1;
-- 5. 부서번호가 20번인 부서를 삭제해 보자.
DELETE FROM DEPT_02 WHERE DEPTNO = 20;
-- 6. SAVEPOINT C2를 만들어 보자.
SAVEPOINT C2;
-- 7. 마지막으로 부서번호가 10번인 부서를 삭제해 보자.
DELETE FROM DEPT_02 WHERE DEPTNO = 10;
-- 8. 부서번호가 20번인 부서를 삭제하기 바로 전으로 되돌리자.
-- ROLLBACK을 이용하면 특정 지점으로 되돌아가게 됨.
ROLLBACK TO C1;
'Back-End > Database' 카테고리의 다른 글
[SQL] PL/SQL(PROCEDUAL LANGUAGE / SQL) (0) | 2021.10.05 |
---|---|
[SQL] GROUP BY 절 / HAVING절 (0) | 2021.10.05 |
[SQL] 서브 쿼리 (0) | 2021.10.05 |
[SQL] 컬럼 속성(제약 조건) (0) | 2021.10.05 |
[SQL] view (0) | 2021.10.05 |
댓글