SQLD 3-4 ] TCL (TRANSACTION CONTROL LANGUAGE)
❏ 트랜잭션
- 데이터베이스의 논리적 연산 단위.
- 밀접히 관련되어서 분리될 수 없는 한 개 이상의 데이터베이스 조작(insert, update, delete, select for update)
- 분할할 수 없는 최소의 단위 ALL or NOTHING
- COMMIT : 올바르게 반영된 데이터를 데이터베이스에 반영. (한마디로 적용.)
- ROLLBACK : 트랜잭션 시작 이전의 상태로 돌리는 것.
- LOCK : 트랜잭션이 수행되는 동안 특정 데이터에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 제한하는 기법
한마디로. 트랜잭션이란 물리적이 아니라 논리적. 눈에 보이지 않고. 어떠한 작업의 단위이다.
트랜잭션내에 묶인 작업들이 다 성공 하거나 아니면 하나라도 실패하면 전으로 돌려놔야한다.
대표적인 예로 은행 계좌이체.
만약 이 계좌이체 과정들이 하나의 트랜잭션으로 묶이지 않고, 따로따로 되있다면..
A 라는 계좌에서 10,000 원을 B 의 계좌로 입금하는데.
중간에 A의 계좌에서 10,000 원 빼는 SQL 명령문은 성공했다. 그런데, 이제 B 의 계좌에 10,000원을
추가해야하는 SQL 명령문이 실패해버렸다. 그냥. A만 10,000원이 없어졌다.. 이런일이 일어나면 안되니까
하나의 트랜잭션 안에 있어야 한다.
트랜잭션의 4가지 특성
1. 원자성 : all or nothing. 다 되던지, 아니면 아예 실행되기 전으로 하던지.
2. 일관성 : 문 들어가기 전과 나온 후가 같아야됨. 전에 내용이 잘못되있는게 없다면. 트랜잭션 후에도
내용에 잘못된게 없어야겠지
3. 독립성(고립성) : 트랜잭션이 실행되는 도중에는 다른 트랜잭션들이 방해할 수는 없다.
4. 지속성 : 트랜잭션이 성공하면 그 내용은 영구적으로 저장된다.
독 일 지 원
❏ COMMIT
- 입력한 자료에 문제가 없다. commit 명령어를 통해 트랜잭션을 완료할 수 있다.
- 하는 법은 그냥 commit; 하면됨
COMMIT / ROLLBACK 이전의 상태
- buffer 에만 영향을 받았기 때문에 데이터의 변경 이전상태로 복구가 가능
- 현재사용자는 select 문장으로 결과를 확인 가능
- 다른사용자는 현재사용자가 수행한 명령의 결과를 볼 수 없다
- 변경된 행은 잠금이 설정되어서 다른사용자가 변경할 수 없다
한마디로 insert, update, delete 이런거 (DML) 하면 바로 DB 에 적용되는게 아니라
버퍼에서 놀아난다고 했었는데. commit 를 해야 진정한 적용을 하는것이다.
commit 를 하기 직전까지의 얘기이다. 다 맞는말.
COMMIT 를 한 후..
- 데이터에 대한 변경사항이 데이터베이스에 반영된다
- 이전 데이터는 영원히 잃어버리게 된다
- 모든 사용자는 결과를 볼 수 있다
- 관련된 행에 대한 잠금이 풀리고 다른 사용자들이 행을 조작할 수 있게 된다
SQL SERVER 의 경우는..?
1. auto commit : 자동 commit 이라서 따로 commit 이나 rollback 을 처리할 필요가 없다고 한다
2. 암시적 트랜잭션 : oracle 과 같은 방식(시작은 DBMS, 끝은 사용자가 수동으로). 인스턴스/세션 단위 설정 가능
3. 명시적 트랜잭션 : 시작과 끝 모두 사용자가 수동으로 지정한다. 시작: begin tran 끝: commit/rollback
❏ ROLLBACK
- 테이블 내 조작한 데이터에 대해서 commit 이전에 변경사항을 취소하는 명령
- 관련된 행에 대한 잠금이 풀리고 다른 사용자들이 데이터 변경을 할 수 있다
- 애플리케이션의 이상 종료가 발생해도 트랜잭션이 모두 rollback 된다
- 사용법은 rollback;
SQL SERVER 의 경우는...?
- 기본적으로 auto 라서 명시적트랜잭션 으로 해줘야한다.
❏ SAVEPOINT
- 저장 점. 트랜잭션에 포함된 전체 작업을 롤백하는게 아니라. 현 시점 ~ savepoint 까지만 롤백한다.
- 여러개의 저장점을 정의할 수 있고, 동일이름으로 정의했을 때 나중에 정의한게 유효하다.
❏ ROLLBACK 의 원리
- 특정 저장점까지 롤백하면 그 저장점 이후에 설정한 저장점이 무효가 된다.
(예 : rollback 을 a 로 해버렸으면.. b 는 무효가되겠지 )
- 저장점 지정 없이 rollback 을 실행하면 맨 처음으로.
댓글
이 글 공유하기
다른 글
-
SQLD 3-6 ] 함수
SQLD 3-6 ] 함수
2016.02.23 -
SQLD 3-5 ] WHERE
SQLD 3-5 ] WHERE
2016.02.22 -
SQLD 3-3 ] DML (DATA MANIPULATION LANGUAGE)
SQLD 3-3 ] DML (DATA MANIPULATION LANGUAGE)
2016.02.22 -
SQLD 3-2 ] DDL (DATA DEFINITION LANGUAGE)
SQLD 3-2 ] DDL (DATA DEFINITION LANGUAGE)
2016.02.18