SQLD 1과목 데이터 모델과 SQL
<목차>
|
3. 모델이 표현하는 트랜잭션의 이해
트랜잭션
1) 트랜잭션의 개요
- 트랜잭션은 데이터베이스의 논리적 연산단위
- 트랜잭션이란 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킴.
- 하나의 트랜잭션에는 하나 이상의 SQL 문장이 포함
- 분할 할 수 없는 최소의 단위 (전부 적용하거나 전부 취소)
2) TCL (TRANSACTION CONTROL LANGUAGE)
- 트랜잭션을 통제하는 언어
- COMMIT: 올바르게 반영된 데이터를 데이터베이스에 반영시키는 것
- ROLLBACK: 트랜잭션 시작 이전의 상태로 되돌리는 것
- SAVEPOINT : 저장점
- 트랜잭션의 대상이 되는 SQL 문은 UPDATE, INSERT, DELETE 등 데이터를 수정하는 DML 문
3) 트랜잭션의 특성
특성 | 설명 |
원자성 (atomicity) |
트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 함 (All or Nothing) |
일관성 (consistency) |
트랜잭션이 실행되기 전에 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 됨. |
고립성 (Isolation) |
트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 됨 |
지속성 (Durability) |
트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이텁터베이스의 내용은 영구적으로 저장. |
COMMIT
- 입력한 자료나 수정한 자료에 대해서 또는 삭제한 자료에 대해서 전혀 문제가 없다고 판단 되었을 경우 COMMIT 영령어를 통해 트랜잭션을 완료
- COMMIT 이나 ROLLBACK 이전의 데이터 상태
- 단지 메모리 BUFFER에만 영향을 받았기 때문에 데이터의 변경 이전 상태로 복구 가능
- 현재 사용자는 SELECT 문장으로 결과를 확인 가능
- 다른 사용자는 현재 사용자가 수행한 명령의 결과를 볼 수 없다
- 변경된 행은 잠금(LOCKING)이 설정되어서 다른 사용자가 변경할 수 없다
- COMMIT 이후의 데이터 상태
- 데이터에 대한 변경 사항이 데이터베이스에 반영
- 이전 데이터는 영원히 잃어버리게 된다
- 모든 사용자는 결과를 볼 수 있다
- 관련된 행에 대한 잠금 (LOCKING)이 풀리고, 다른 사용자들이 행을 조작할 수 있게 된다
- AUTO COMMIT
SQL 기본 방식이며, DML, DDL 을 수행할 때마다 DBMS가 트랜잭션을 컨트롤 하는 방식.
명령어가 성공적으로 수행되면 자동으로 COMMIT 을 수행하고 오류가 발생하면 자동으로 ROLLBACK을 수행
- CREATE, ALTER, DROP, RENAME, TRUNCATE TABLE 등 DDL 문장을 실행하면 그 전후 시점에 자동으로 커밋됨.
- DML 문장 이후에 커밋 없이 DDL 문장이 실행되면 DDL 수행 전에 자동으로 커밋
- 데이터베이스를 정상적으로 접속을 종료하면 자동으로 트랜잭션이 커밋
ROLLBACK
- 테이블 내 입력한 데이터나, 수정한 데이터, 삭제한 데이터에 대하여 COMMIT 이전에는 변경 사항을 취소할 수 있는데 데이터베이스에서는 ROLLBACK 기능 사용.
- ROLLBACK 은 데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 잠금(LOCKING)이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 된다.
- SQL Server 는 AUTO COMMIT 이 기본 방식이므로 임의적으로 ROLLBACK을 수행하려면 명시적으로 트랜잭션을 선언해야 한다.
- COMMIT과 ROLLBACK 을 사용함으로써 다음과 같은 효과를 볼 수 있다
- 데이터 무결성 보장
- 영구적인 변경을 하기 전에 데이터의 변경 사항 확인 가능
- 논리적으로 연관된 작업을 그룹핑하여 처리 가능
- 어플리캐이션의 이상 종료로 데이터베이스와의 접속이 단절되었을 때는 트랜잭션이 자동으로 롤백
SAVEPOINT
- SAVEPOINT를 정의하면 ROLLBACK 할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT 까지 트랜잭션의 일부만 롤백할 수 있다.
- 복잡한 대규모 트랜잭션에서 에러가 발생했을 때 SAVEPOINT 까지의 트랜잭션만 롤백하고 실패한 부분에 대해서만 다시 실행할 수 있다.
- 복수의 저장점을 정의할 수 있으며, 동일이름으로 저장점을 정의했을 때는 나중에 정의한 저장점이 유효.
이전글
다음글
'자격증 > SQLD' 카테고리의 다른 글
데이터 모델과 SQL - 본질식별자 vs 인조식별자 (0) | 2024.01.07 |
---|---|
데이터 모델과 SQL - Null 속성의 이해 (1) | 2024.01.04 |
데이터 모델과 SQL - 관계와 조인의 이해 (1) | 2024.01.01 |
데이터 모델과 SQL - 정규화 (2) | 2023.12.30 |
데이터 모델링의 이해 - 식별자 (1) | 2023.12.27 |