각각의 작업들을 묶어서 하나의 작업 단위로 만들어 버리는 것을 트랜잭션이라고 한다.
하나의 트랜잭션으로 이루어진 작업들을 반드시 한꺼번에 완료가 되어야 하며, 그렇지 않을 경우에는 한꺼번에 취소되어야 한다.
✨데이터의 변경 사항(DML = INSERT, UPDATE, DELETE)들을 하나에 트랜잭션에 담아 처리한다.
✨COMMIT(트랜잭션 종료 처리 후 저장)
✨ROLLBACK(트랜잭션 취소)
✨SAVEPOINT(임시저장)를 통해서 트랜잭션을 제어한다.
CREATE TABLE EMP_01
AS SELECT E.EMP_ID, EMP_NAME, D.DEPT_TITLE
FROM EMPLOYEE E
LEFT JOIN DEPARTMENT D ON (E.DEPT_CODE = D.DEPT_ID);
--EMP_01 테이블에서 EMP_ID가 900, 901인 사원 지우기
DELETE FROM EMP_01
WHERE EMP_ID IN (900, 901);
SELECT *
FROM EMP_01;
--두개의 행이 삭제된 시점에 SAVEPOINT 지정
SAVEPOINT SP;
--EMP_ID가 200인 사원 지우기
DELETE FROM EMP_01
WHERE EMP_ID = 200;
ROLLBACK TO SP;
ROLLBACK;
--마지막 커밋으로
여기서
ROLLBACK 후 ROLLBACK TO SP 로 하면
에러난다. ✨✨✨역행이기에??
--EMP_ID 200인 사원 지우기
DELETE
FROM EMP_01
WHERE EMP_ID = 200;
CREATE TABLE TEST(
TID NUMBER
);
--DDL(CREATE, ALTER, DROP..)구문을 실행하는 순간 기존 메모리 버퍼에 임시저장된 변경사항들이 무조건 DB에 반영된다.
--즉 COMMIT 된다.
ROLLBACK;
SELECT *
FROM EMP_01
ORDER BY EMP_ID;
롤백해도 안됨!!