✍ DCL과 비슷하지만 데이터가 아닌 트랜잭션을 제어할때 사용한다. 논리적인 작업 단위를 묶어 DML에 의해 조작된 결과를 트랜잭션 별로 제어한다.
✍트랜잭션은 데이터베이스의 논리적 연산 단위(하나의 연속적인 업무 단위) - 하나의 트랜잭션에는 하나 이상의 SQL 문장이 포함
✍ 분할 할 수 없는 최소의 단위
✍ ALL OR NOTHING 개념(모두 COMMIT 하거나 ROLLBACK 처리 해야 함)
✍ 원자성(atomicity) : 트랜잭션 정의된 연산들 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 함
✍일관성(consistency) : 트랜잭션 실행 전 데이터베이스 내용이 잘못되어 있지 않다면 트랜잭션 실행 이후에도 데이터베이스 내용의 잘못이 있으면 안됨
✍고립성(isolation) : 트랜잭션 실행도중 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안됨
✍지속성(durability) : 트랜잭션이 성공적으로 수행되면 갱신한 데이터베이스 내용이 영구적으로 저장
✍ DDL, DCL 문장이 완료했을 시 자동으로 커밋, 명시적인 COMMIT이나 ROLLBACK 없이 SQL PLUS를 정상적으로 종료할 때
✍ 자동적인 롤백은 SQL PLUS를 비정상적으로 종료할 때나 시스템 실패 시 발생한다.

| 용어 | 설명 |
|---|---|
| COMMIT | 입력, 수정, 삭제한 데이터에 이상이 없을 경우 데이터를 저장하는 명령어 |
| ROLLBACK | 테이블 내 입력한 데이터나 수정한 데이터, 삭제한 데이터에 대해 변경을 취소하는 명령어 |
| SAVEPOINT | 트랜잭션 내에서 롤백을 부분적으로 수행하기 위해 사용되는 지점을 지정하는 데 사용 |
-- 트랜잭션
DROP TABLE EMPS;
-- DDL은 자동 커밋이 된다.
CREATE TABLE EMPS AS SELECT * FROM EMPLOYEES;
DELETE FROM EMPS WHERE DEPARTMENT_ID = 20;
SAVEPOINT DELETE_20;
DELETE FROM EMPS WHERE DEPARTMENT_ID = 30;
ROLLBACK; -- CTAS로 EMPS 테이블을 생성한 시점으로 돌아감
ROLLBACK TO SAVEPOINT DELETE_20; -- EMPS 테이블의 DEPARTMENT_ID가 20인 행을 삭제한 시점으로 돌아감
SELECT * FROM EMPS WHERE DEPARTMENT_ID = 30; -- 롤백으로 인해 6개의 행 출력
SELECT * FROM EMPS WHERE DEPARTMENT_ID = 20; -- 0개의 행
-- 오토 커밋 설정
-- autocommit IMMEDIATE
SET AUTOCOMMIT ON
SHOW AUTOCOMMIT
-- autocommit OFF
SET AUTOCOMMIT OFF
SHOW AUTOCOMMIT
인프런 오라클 데이터베이스