ㅁ DCL은 데이터 제어어
TCL은 트랜잭션 제어어
ㅁ < TCL >
- Transaction Contol Language 트랜잭션 제어어
- 트랜잭션은 데이터베이스의 논리적 연산단위(업무단위)
- 데이터의 변경이 실제 바로 DB에 반영되지 않음. 추가, 수정, 삭제가 된 것처럼 보이지만 실제론 안되어있음.
변경 사항들이 하나의 트랜잭션으로 묶여있다.
ㅁ TCL 종류
- COMMIT : 트랜잭션에 포함되어있는 변경사항을 실제 DB에 반영시키고 트랜잭션 소멸
- ROLLBACK : 트랜잭션에 포함되어있는 변경사항을 삭제(취소)한 후 트랜잭션 소멸
- SAVEPOINT : 현재 시점에 특정 세이브포인트명으로 임시저장점을 만든다.
롤백시 전체 취소가 아니라 일부만 롤백 가능.
ㅁ 트랜잭션의 처리 대상이 되는 SQL문은 DML(INSERT, UPDATE, DELETE)
- 이런 것들은 바로 DB에 반영되지 않고 트랜잭션에 쌓여있다.
- DDL은 AUTO COMMIT
ㅁ 예시
ㅇ 사번이 900, 901인 사원 데이터 삭제하고 ROLLBACK하기.
SELECT *
FROM EMP_NEW;
DELETE FROM EMP_NEW WHERE EMP_ID=900;
DELETE FROM EMP_NEW WHERE EMP_ID=901;
ROLLBACK;
- 데이터 2개 지웠다고 롤백도 두번 해야하는 것은 아님. 한번만 해도 모두 롤백됨.
트랜잭션이 각각 따로 관리되는게 아니고, 없으면 만들고 있으면 거기에 추가함.
- 데이터 추가, 수정, 삭제가 실제 DB에 바로 반영되는 것이 아니라, 트랜잭션에 두 문장이 묶여있다.
ROLLBACK하면 DB에 반영하지 않은 채로 트랜잭션이 그대로 소멸됨.
- INSERT, UPDATE, DELETE 다 ROLLBACK 됨.
ㅇ 사번이 900, 901인 사원 데이터 삭제하고 COMMIT 후 ROLLBACK하기
SELECT *
FROM EMP_NEW;
DELETE FROM EMP_NEW WHERE EMP_ID=900;
DELETE FROM EMP_NEW WHERE EMP_ID=901;
COMMIT;
ROLLBACK;
- COMMIT한 순간 되돌릴 수 없음.
COMMIT은 트랜잭션에 담겨있는 변경 사항을 실제 DB에 반영시키는 명령어.
ㅇ SAVEPOINT 활용하기
SELECT *
FROM EMP_NEW;
DELETE FROM EMP_NEW WHERE EMP_ID=900;
DELETE FROM EMP_NEW WHERE EMP_ID=901;
SAVEPOINT SP;
DELETE FROM EMP_NEW WHERE EMP_ID=999;
ROLLBACK;
- 이러면 3개 데이터 삭제한게 전부 롤백됨. 세이브 포인트 의미가 없음.
ㅇ SAVEPOINT 활용하기2
SELECT *
FROM EMP_NEW;
DELETE FROM EMP_NEW WHERE EMP_ID=900;
DELETE FROM EMP_NEW WHERE EMP_ID=901;
SAVEPOINT SP;
DELETE FROM EMP_NEW WHERE EMP_ID=999;
ROLLBACK TO SP;
- 트랜잭션에 2개 데이터 삭제, SP, 1개 데이터 삭제가 쌓여있음.
이 상황에서 ROLLBACK TO SP를 하면, SP 이후에 한해서 ROLLBACK을 함.
- 현시점부터 세이브포인트까지 구간을 ROLLBACK한다.
- 그런데 ROLLBACK TO SP; 하고 ROLLBACK;을 또 하면 3개 데이터 다 살아남.
ㅁ DDL
SELECT *
FROM EMP_NEW;
DELETE FROM EMP_NEW WHERE EMP_ID=900;
DELETE FROM EMP_NEW WHERE EMP_ID=901;
DELETE FROM EMP_NEW WHERE EMP_ID=999;
CREATE TABLE TEST( TID NUMBER ); // DDL문 사용
ROLLBACK;
- 롤백이 안된다. COMMIT을 한 적이 없는데 롤백이 안 됨.
DDL문 쓰는 순간 AUTO COMMIT.
ㅁ 웹 개발시 기능(요청) 단위로 트랜잭션으로 묶어 관리
ㅇ 게시글 작성 기능 예제
INSERT INTO 게시글 VALUES(사용자가입력한 게시글 제목, 내용, ...);
INSERT INTO 첨부파일 VALUES(게시글의 첨부파일 원본명, 수정명, 저장경로, ...);
- 한 개의 기능에 있어서 여러 DML이 수행될 수 있음.
- 게시글 INSERT는 성공했는데, 첨부파일 INSERT는 실패함. 이럴 때 ROLLBACK을 하면 둘 다 취소가 됨.
둘 다 성공했으면 COMMIT하면 되고.
'클라우드 활용 자바개발자 양성과정 > 02. 데이터베이스 활용' 카테고리의 다른 글
11.OBJECT(VIEW) (2) | 2024.07.24 |
---|---|
10. OBJECT(SEQUENCE) (6) | 2024.07.24 |
08_DDL(ALTER, DROP) + DCL(GRANT, REVOKE) (0) | 2024.07.23 |
07_DML(INSERT, UPDATE, DELETE) (0) | 2024.07.23 |
06_DDL(CREATE) (1) | 2024.07.22 |