TCL : TRANSACTION CONTROL LANGUAGE
- DML에 의해 조작된 결과를
논리적 작업단위(트랜잭션) 별로 제어하는 명령어
TRANSACTION
-데이터베이스의 ' 논리적 ' 연산단위
- COMMIT(확정)까지의 데이터 변경사항(DML)들을 하나의 트랜젝션으로 묶어서 처리
- 트랜잭션의 대상이 되는 SQL문 :
INSERT, UPDATE, DELETE
(SELECT는 데이터에 변경을 가하지 않으므로 영향 없음)
TRANSACTION의 종류
1) COMMIT : 하나의 트랜젝션에 담겨있는 변경사항들(DML들)을 실제 DB에 반영
--> COMMIT 후 트랜젝션은 비워짐
2) ROLLBACK: 하나의 트랜젝션에 담겨있는 변경사항들(DML들)을 삭제하고 마지막 커밋시점으로 돌아감
3) SAVEPOINT : 지금 시점을 임시저장점으로 정의
-> DDL구문 (CREATE, ALTER, DROP)을 실행하는 순간
기존에 트렌잭션에 있는 모든 변경사항들을 무조건 실제 DB에 반영(COMMIT)
그 다음 DDL이 수행됨
따라서 , 변경사항이 있다면 DDL 실행 전 정확히 FIX (COMMIT, ROLLBACK)후 DDL을 수행해야 함
DDL문이 수행되면 변경 불가!
** 중요: DML을 사용하면 COMMIT, ROLLBACK 둘 중하나(트랜젝션 처리) 무조건 해야함
-- 테이블명 EMP_02
-- EMPLOYEE 복사
CREATE TABLE EMP_02
AS SELECT * FROM EMPLOYEE;
SELECT * FROM EMP_02;
-- 사번이 221인 사원 삭제
DELETE FROM EMP_02
WHERE EMP_ID = 221;
-- 사번이 220인 사원 삭제
DELETE FROM EMP_02
WHERE EMP_ID = 220;
ROLLBACK;
DELETE FROM EMP_02
WHERE EMP_ID = 220;
-- 사번 800, 이름 홍길동 사원 추가
INSERT INTO EMP_02 (EMP_ID, EMP_NAME, EMP_NO, JOB_CODE, SAL_LEVEL) VALUES(800, '홍길동', '12345-5566666', 'J1', 'S1');
COMMIT;
SELECT * FROM EMP_02;
ROLLBACK;
--------------2단계 끝 -----
-- 사번이 217. 216, 214인 사원 삭제
DELETE FROM EMP_02
WHERE EMP_ID IN (217, 216, 214);
----3개행이 삭제된 시점에서 SAVEPOINT 지정
SAVEPOINT SP1;
DELETE FROM EMP_02
WHERE EMP_ID = 200;
SELECT * FROM EMP_02;
ROLLBACK TO SP1 ;
COMMIT;
SELECT * FROM EMP_02;
DELETE FROM EMP_02
WHERE EMP_ID = 800;
--TABLE 생성(DDL)
CREATE TABLE TEST(
TID NUMBER
);
ROLLBACK;
'Database' 카테고리의 다른 글
[SQL] 시퀀스 SEQUENCE (1) | 2022.10.05 |
---|---|
[SQL] 뷰 VIEW (1) | 2022.10.05 |
[SQL] DCL - GRANT, REVOKE (1) | 2022.10.05 |
[SQL] DDL - CREATE/ ALTER/ DROP (0) | 2022.10.05 |
[SQL] DML - INSERT/ UPDATE /DELETE (0) | 2022.10.04 |