> 트랜잭션
- 트랜잭션은 데이터베이스의 논리적 연산단위
- 트랜잭션이란 밀접히 관련되어 분리될수 없는 한 개 이상의 데이터베이스 조작을 가리킨다.
- 하나의 트랜잭션에는 하나 이상의 SQL 문장이 포함된다.
- 트랜잭션은 의미적으로 분한할 수 없는 최소의 단위
- 그렇기 때문에 전부 적용하거나 전부 취소한다. (ALL or NOTHING)
> 트랜잭션 특성
특성 | 설명 |
원자성 | 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않는 상태로 남아 있어야 한다. |
일광성 | 트랜잭션이 실행 되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다. |
고립성 | 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다 |
지속성 | 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 지속된다. |
> TCL
- 트랜잭션을 콘트롤하는 TCL
- 커밋(Commit) : 변경된 데이터를 데이터베이스에 영구적으로 반영하라
- 롤백(ROLLBACK) : 변경된 데이터가 문제가 있으니 변경 전 데이터로 본귀하라
- 저장점(SAVEPOINT) : 데이터 변경을 사전에 지정한 저장점까지만 롤백하라
- COMMIT과 ROLLBACK을 사용함으로써 얻는 효과 : 데이터 무결성 보장, 영구적인 변경을 하기 전에 데이터의 변경 사항 확인 가능, 논리적으로 연관된 작업을 그룹핑하여 처리 가능
- COMMIT이나 ROLLBACK 이전 데이터 상태 : 현재 사용자는 SELECT 문장으로 결과를 확인 가능하다. 다른 사용자는 현재 사용자가 수행한 명령의 결과를 볼 수 없다. 변경된 행은 잠금이 설정되어 다른 사용자가 변경할 수 없다.
> COMMIT
- INSERT 문장, UPDATE 문장, DELETE 문장 사용 후에 일련의 변경 작업이 완료되었음을 데이터베이스에 알려주기 위해 사용한다.
- 데이터에 대한 변경 사항이 데이터 베이스에 반영된다.
- 이전 데이터는 영원히 잃어버리게 된다. (별도 로그 보관시 복구 가능)
- 모든 사용자는 결과를 볼 수 있다.
- 관련된 행에 대한 잠금이 풀리고, 다른 사용자들이 행을 조작할 수 있게 된다.
> ROLLBACK
- 테이블 내 입력한 데이터나 수정한 데이터, 삭제한 데이터에 대하여 COMMIT 이전에는 변경 사항을 취소하는 것
- 데이터에 대한 변경 사항은 취소된다.
- 이전 데이터는 다시 재저장된다.
- 관련된 행에 대한 잠금이 풀리고 다른 사용자들이 행을 조작할 수 있게 된다.
> SAVEPOINT
- 트랜잭션에 포함된 전체 작업을 롤백하는것이 아니라 현 시점에서 미리 지정한 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.
- 복수의 저장점을 정의할 수 있으며 동일 이름으로 저장점을 정의했을 때는 나중에 정의한 저장점이 유효하다.
> COMMIT과 ROLLBACK
- 트랜잭션은 트랜잭션의 대상이 되는 SQL문을 실행하면 자동으로 시작되고, COMMIT 또는 ROLLBACK을 실행한 시점에서 종료된다.
- 논리적으로 연관된 작업을 그룹핑하여 처리 가능
- 영구적인 변경을 하기 전에 데이터의 변경 사항 확인 가능
- 데이터 무결성 보장
- 자동 커밋이 발생하는 경우 : DDL 문장을 실행하면 그 전후 시점, 데이터 베이스를 정상적으로 종료할 때, 애플리케이션의 이상 종료로 데이터베이스와의 접속이 단절되었을때
출처 : 한국데이터산업진흥원 게시자료