반응형
이 게시물은 Database GUI Oracle SQL Developer의 아래 버전 정보를 기준으로 작성되었습니다. Java(TM) 플랫폼 : 1.8.0_321 Oracle IDE : 4.1.5.21.78 |
트랜잭션(transaction)의 개념 및 TCL
설명
이전 UPDATE 관련 게시물(링크)에서 ROLLBACK이라는 명령어를 사용하여 수행한 DML을 다시 되돌렸다. 이는 트랜잭션을 취소할 때 사용하는 명령어로 TCL(Transaction Control Language) 중 하나이다.
트랜잭션(transaction)이란 더 이상 분할할 수 없는 최소 수행 단위를 말한다. 즉 이러한 트랜잭션 안에 여러 명령어들이 있다면, 모두 한 번에 수행하여 작업을 완료하거나, 모두 수행하지 않는 상태인 것이다. 예를 들어 보자.
10,000원이 든 계좌 A에서 0원이 든 계좌 B로 돈 10,000원을 입금한다. |
위의 과정을 위해 아래와 같이 쿼리를 작성했다고 가정하자.
-- query1
UPDATE 계좌
SET 잔액 = 0
WHERE 계좌번호 = A;
-- query2
UPDATE 계좌
SET 잔액 = 10000
WHERE 계좌번호 = B;
그런데 이때 query1의 정상 작동한 후, query2가 동작하지 않으면 10000원은 먼지가 되어 버리는 것이다.
이때 두 과정 모두 정상 동작이 되지 않았다면 트랜잭션을 취소하여야 하는데, 이때 사용하는 TCL이 ROLLBACK 명령어이다. 트랜잭션을 반영하고 싶을 경우에는 COMMIT 명령어를 사용한다.
사용 예시
우선 테스트해 볼 테이블을 하나 생성한다.
CREATE TABLE TB_TEMP
AS SELECT *
FROM DEPT;
SELECT * FROM TB_TEMP;
그리고 아래의 쿼리문들을 실행하자.
INSERT INTO TB_TEMP VALUES(99, 'HACKING', 'SEOUL');
UPDATE TB_TEMP SET DNAME = 'SECURITY' WHERE DEPTNO = 30;
DELETE FROM TB_TEMP WHERE LOC = 'BOSTON';
SELECT * FROM TB_TEMP;
테이블의 데이터 변동을 확인했으면 이제 아래 명령어를 실행시켜 보자.
ROLLBACK;
SELECT * FROM TB_TEMP;
ROLLBACK 명령어를 통해 다시 이전 상태로 복구된 것을 확인할 수 있다.
이번에는 COMMIT 명령어를 먼저 사용해 보기 위해 아래 쿼리문들을 순차적으로 진행하자.
INSERT INTO TB_TEMP VALUES(99, 'HACKING', 'SEOUL');
UPDATE TB_TEMP SET DNAME = 'SECURITY' WHERE DEPTNO = 30;
DELETE FROM TB_TEMP WHERE LOC = 'BOSTON';
COMMIT;
ROLLBACK;
SELECT * FROM TB_TEMP;
COMMIT 명령어를 통해 트랜잭션을 반영했기 때문에 ROLLBACK 명령어로 복구가 되지 않는 것을 확인할 수 있다.
반응형
'개발 지식 > [DBMS] Oracle' 카테고리의 다른 글
[Oracle] DDL(2) - 테이블 생성(CREATE TABLE) (0) | 2022.06.15 |
---|---|
[Oracle] DDL(1) - DDL의 개념과 종류 (0) | 2022.06.14 |
[Oracle] DML(7) - DELETE (0) | 2022.06.12 |
[Oracle] DML(6) - 서브쿼리를 활용한 UPDATE (0) | 2022.06.11 |
[Oracle] DML(5) - UPDATE의 기본 개념과 사용 형태 (0) | 2022.06.10 |