220428
데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위
데이터베이스의 상태를 변경시키다는 것은 간단하게 말해서 INSERT, DELETE, UPDATE
를 이용하여 데이터베이스를 접근하는 것을 의미한다.
착각하지 말아야 할 것은, 작업의 단위는 질의어 한문장이 아니라는 것.
작업단위는 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것. ex) 업무별, 시간대별
COMMIT / ROLLBACK / SAVEPOINT(=CHECKPOINT)
COMMIT : 현재(하나의) 트랜잭션이 성공적으로 끝났고, 데이터베이스에 반영해라.
ROLLBACK : 현재 트랜잭션을 데이터베이스에 반영하지말고 취소해라(되돌려라).
SAVEPOINT : 트랜잭션을 할 작업 구간 설정, 일부만 ROLLBACK
-- 뷰 아님! 그냥 복사본 원본이랑 관계x
create table tblTrans
as
select name, buseo, jikwi from tblInsa where city = '서울';
select * from tblTrans;
-- 로그인(접속) > 트랙잭션이 시작됨.
-- INSERT, DELETE, UPDATE 명령어는 실행 '즉시' 데이터베이스에 '반영 되지 않는다'. > 임시 적용한다.
delete from tblTrans where name = '박문수';
select * from tblTrans;
-- 진짜로 데이터베이스에 반영해도 된다고 하면 commit
commit; -- 현재 트랙잭션에서 했던 모든 행동을 진짜 데이터베이스에 반영해라
delete from tblTrans where name = '김인수';
select * from tblTrans;
-- 또 새로운 트랜잭션이 자동으로 시작된다.
rollback; -- 현재 트랜잭션에서 했던 모든 행동을 진짜 데이터베이스에 반영하지 말고 없었던 일로 취소해라.'(되돌려라)'
select * from tblTrans; --> '박문수' 살아나지 않음. 한번 commit한 것은 rollback에 의해서 되돌릴 수 없다.
delete from tblTrans where name = '김인수';
select * from tblTrans;
- 클라이언트 접속 직후
- commit 실행 직후
- rollback 실행 직후
- commit 실행
- rollback 실행
- 클라이언트 접속 종료
- DDL 실행 (★★★)
commit 실행 > 현재 트랜잭션을 DB에 반영함
rollback 실행 > 현재 트랜잭션을 DB에 반영 안 함
클라이언트 접속 종료
정상 종료
비정상 종료
DDL 실행 (★★★ 주의)
select * from tblTrans;
commit; -- 지금부터 새로운 트랜잭션 시작이다. 라는 의미
delete from tblTrans where buseo = '영업부';
select * from tblTrans;
-- + COMMIT
create table tblTest(
seq number primary key
);
-- 그래 영업부는 지우면 안될거 같아.
rollback;
-- 영업부 안 돌아옴!!!! why? DDL은 AUTO COMMIT.
select * from tblTrans;
commit;
delete from tblTrans where buseo = '기획부';
select * from tblTrans;
rollback;
ex) savepoint
commit; -- A
select * from tblTrans;
insert into tblTrans values ('가가가', '영업부', '부장');
insert into tblTrans values ('나나나', '영업부', '과장');
savepoint a; -- 중간 저장
delete from tblTrans where name = '김말숙';
select * from tblTrans;
savepoint b;
delete from tblTrans where buseo = '개발부';
select * from tblTrans;
rollback to b; -- savepoint b로 이동
select * from tblTrans;
rollback to a;
select * from tblTrans;
rollback; -- A로 이동
select * from tblTrans;
클라이언트 도구
DDL(CREATE, DROR, ALTER) 실행 시 자동 COMMIT
트랜잭션(COMMIT, ROLLBACK) 실행하면 취소가 안 되므로 신중히