< TCL : TRANSACTION CONTROL LANGUAGE >
트랜잭션 제어 언어
* 트랜잭션 (TRANSACTION)
- 데이터베이스의 논리적 연산단위
- 데이터의 변경사항(DML)들을 하나로 묶어서 처리할 때 필요한 개념
- DML(INSERT,UPDATE,DELETE)문을 한번 수행할 때 트랜잭션이 존재하면 해당 트랜잭션에 같이 묶어서 처리
트랜잭션이 존재하지 않으면 새로운 트랜잭션을 만들어서 묶음
- COMMIT : 트랜잭션에 담겨있는 변경사항들을 실제 DB에 반영 시키겠다는 의미 (후에 트랜잭션 사라짐)
- ROLLBACK : 트랜잭션에 담겨있는 변경사항들을 삭제(취소) 한 후 마지막 COMMIT 시점으로 돌아감
- SAVE POINT 포인트명 : 현재 시점에 해당 포인트명으로 임시저장점을 정의해두는 것
ROLLBACK시 전체 취소가 아니 일부만 ROLLBACK가능함
예시 ) ROLLBACK
SELECT * FROM EMP_01;
-- 사번이 900인 사원 삭제
DELETE FROM EMP_01
WHERE EMP_ID = 900;
--901번 사원 삭제
DELETE FROM EMP_01
WHERE EMP_ID = 901;
ROLLBACK;
>> ROLLBACK 하면 삭제된 부분 취소됨
예시 ) COMMIT
DELETE FROM EMP_01
WHERE EMP_ID = 200;
--800번 사원 추가
INSERT INTO EMP_01
VALUES(800,'홍길동','총무부');
COMMIT;
SELECT * FROM EMP_01;
ROLLBACK;
>> COMMIT 하면 트랜잭션에 담겨있던 사항들 DB에 반영되어 이후 ROLLBACKD해도 변경사항이 취소되지않음
예시) SAVEPOINT
--217, 216, 214사원 삭제
DELETE FROM EMP_01
WHERE EMP_ID IN( 217,216,214);
SAVEPOINT SP;
-- 801 사원 추가
INSERT INTO EMP_01
VALUES(801,'김말똥','인사관리부');
--218 사원 삭제
DELETE FROM EMP_01
WHERE EMP_ID = 218;
ROLLBACK TO SP; --SP시점까지만 롤백
COMMIT;
>> SAVEPOINT SP 로 3명의 사원 삭제한 부분까지를 저장하고 , 이후 ROLLBACK TO SP를 하면 그 부분으로 되돌아감
( 801사원 추가/ 218 사원 삭제 부분은 취소됨 )
** 주의 사항
--900, 901사원 지움
DELETE FROM EMP_01
WHERE EMP_ID IN (900,901);
--DDL문(CREATE, ALTER, DROP)
CREATE TABLE TEST(
TID NUMBER
);
--DDL문 입력되는 순간 COMMIT되버림 ( 트랜잭션에 담겨있던것 DB에 반영되어 롤백해도 취소 불가)
ROLLBACK;
>> DDL문(CREATE, ALTER,DROP)을 수행하는 순간 무조건 COMMIT(실제 DB에 반영)
즉, DDL문 수행 전 변경사항들이 있다면 정확히 픽스 (COMMIT,ROLLBACK)하고 진행
'ORACLE' 카테고리의 다른 글
ORACLE 11. OBJECT (VIEW) _ DML (0) | 2022.11.24 |
---|---|
ORACLE 11. OBJECT (VIEW) (0) | 2022.11.24 |
ORACLE 09. DCL(GRANT, REVOKE) (0) | 2022.11.24 |
ORACLE 08. DDL (ALTER, DROP) (0) | 2022.11.23 |
ORACLE 07. DML (DELETE) (0) | 2022.11.23 |