본문 바로가기

DB/SQLD

SQL 기본 - TCL

반응형

트랜잭션

데이터베이스의 논리적 연산 단위.

밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킨다.

즉, 분할 할 수 없는 최소 단위다.

은행 계좌 이체에서 두가지 이상의 작업이 필요하다.

1. A계좌에서 만원을 빼고

2. B계좌에 만원을 넣는다.

이 두 가지 작업이 모두 성공적으로 완료되었을 때 종료된다.

만약 A계좌에서 만원을 뺐는데 어떤 장애로 B계좌에 만원을 넣는 것을 실패하면 A계좌에 다시 만원을 넣어 복구시켜줘야 한다는 것이다.

이런 계좌이체같은 하나의 논리적인 작업 단위를 구성하는 세부적인 연산들의 집합을 트랜잭션이라 한다.

트랜잭션의 특징

원자성 : ALL OR NOTHING 연산들을 모두 성공하든지 모두 실패한 원래 상태로 남아 있든지.

일관성 : 트랜잭션이 실행되기 전의 데이터베이스가 정상이라면 실행된 후에도 정상이어야 한다.

고립성 : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들지 않아야 한다.

지속성 : 트랜잭션이 성공적으로 수행되면 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

TCL

이런 트랜잭션과 관련된 명령어

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1. COMMIT
INSERT INTO PLAYER VALUES('1997035','K02','이운재','GK',182,82,1);
 
COMMIT;
//삽입하고 COMMIT을 통해 테이블에 적용되었다.
// UPDATEDELETE 등도 DML 사용 후 COMMIT; 으로 적용함.
 
2. ROLLBACK
UPDATE PLAYER
SET HEIGHT = 100;
 
ROLLBACK;
// 지난 COMMIT 까지 변경 사항을 취소할 수 있음.
 
3. SAVEPOINT
SAVE SAVEPOINT SVPT1;
 
INSERT INTO PLAYER VALUES('1997035','K02','이운재','GK',182,82,1);
 
ROLLBACK TO SVPT1;
//SAVEPOINT 를 지정하면 트랜잭션에 포함된 모든 작업을 롤백하는 것이 아니라 현 시점에서 해당 SAVEPOINT까지 트랜잭션의 일부를 롤백할 수 있다.
//SAVEPOINT 를 여러개를 지정했을 경우에도 해당 SAVEPOINT까지 롤백시킬 수 있으나, 과거의 SAVEPOINT로 갔다가 미래의 SAVEPOINT로 되돌아 올 수는 없다.
//기존 데이터가 다 사라짐.
//DML 이후에 DDL을 사용할 경우 DDL은 AUTO COMMIT이므로 자동으로 이전의 DML도 COMMIT된다.
//또한 데이터베이스를 정상적으로 종료해도 자동으로 트랜잭션이 커밋된다. 이상이 있을 경우 자동 롤백.



반응형

'DB > SQLD' 카테고리의 다른 글

SQL 기본 - group by, having 절  (0) 2017.09.03
SQL 기본 - 함수  (0) 2017.09.02
SQL 기본 - where 절  (0) 2017.09.01
SQL 기본 - DML  (0) 2017.08.28
SQL 기본 - DDL  (0) 2017.08.27