티스토리 뷰
4절 트랜잭션 제어어(TCL; Transaction Control Language)
트랜잭션
데이터베이스의 논리적 연산단위
밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작(SQL)
- 데이터를 수정하는 DML(UPDATE, INSERT, DELETE)은 트랜잭션의 대상
- SELECT FOR UPDATE 등 배타적 LOCK을 요구하는 SELECT도 트랜잭션의 대상
- DDL은 트랜잭션의 대상이 아님(Auto-commit)
- Oracle은 Auto-Commit 옵션을 꺼놔도 자동으로 커밋함
SQL Server는 BEGIN TRANSACTION을 명시적으로 사용하지 않으면 DML도 트랜잭션의 관리 대상이 아님
트랜잭션의 특성(ACID)
- 원자성(Atomicity) : 트랜잭션의 연산은 모두 적용되던지, 모두 취소되어야 한다
- 일관성(Consistency) : 트랜잭션의 실행 전 DB에 이상이 없다면, 실행 후에도 같아야 한다.
- 고립성(Isolation) : 트랜잭션 실행 중, 다른 트랜잭션의 영향을 받아서는 안된다.
- 지속성(Durability) : 트랜잭션이 성공적으로 수행되면, 영구적으로 반영되어 저장된다.
트랜잭션 격리성이 낮을떄 말생하는 문제
Dirty Read : 다른 트랜잭션에 의해 수정되었으나 커밋되지 않은 것을 읽음
Non-Repeatable Read : 같은 쿼리 두번을 수행했으나 그 사이에 값이 바뀌어서 결과가 다름
Phantom Read : 같은 쿼리를 두번 수행했는데, 첫번쨰 쿼리에 없던 유령 레코드 등장
COMMIT과 ROOLBACK
COMMIT
변경사항을 적용하는 SQL 구문
DB를 정상적으로 종료한다면 일반적으로 COMMIT을 수행
- COMMIT 이전
- Memory Buffer에만 저장되어 있으며, 이전 상태로 복구가 가능
- 현재 사용자는 변경 결과를 SELECT 문으로 확인 가능하며, 다른 사용자는 불가능
- 변경된 행은 잠금(Lock)이 설정되어 있어 다른 사용자가 변경 불가능
- COMMIT 이후
- 데이터에 대한 변경 사항이 데이터베이스에 영구적 반영되며, 이전으로 복구 불가능
- 모든 사용자가 결과를 조회할 수 있음
- 관련 행에 락이 해제되어, 다른 사용자도 조작 가능
ROLLBACK
COMMIT 이전에 변경 사항을 취소하는 SQL 구문
변경사항이 취소되고 이전 데이터가 다시 재저장되며, 관련 행에 락도 해제됨
DB가 비정상적으로 종료된다면 ROLLBACK이 수행됨
효과
- 데이터의 무결성 보장
- 영구적 변경 전 데이터의 변경사항 확인 가능
- 논리적으로 연관된 작업을 그룹화하여 처리
SAVEPOINT
--ORACLE
SAVEPOINT 포인트이름;
ROLLBACK TO 포인트이름;
--SQL Server
SAVE TRANSACTION 포인트이름;
ROLLBACK TRANSACTION 포인트이름;
저장점을 정의하여, 전체가 아닌 저장점까지만 ROLLBACK이 가능하게 하는 SQL 구문
- 복수의 저장점을 저장할 수 있으며, 동일 이름으로 저장시 나중에 저장된 지점을 따름
- 특정 저장점까지 롤백 시, 그 이후로 설정된 저장점은 모두 무효
최종 수정일 : 2025/03/04
틀린 사항이 있다면 댓글로 알려주시면 감사하겠습니다.
'SQL > SQLD 이론' 카테고리의 다른 글
| [SQLD] SQL 기본 : 6절 함수 (0) | 2025.03.06 |
|---|---|
| [SQLD] SQL 기본 : 5절 WHERE 절 (0) | 2025.03.05 |
| [SQLD] SQL 기본 : 3절 데이터 조작어 (0) | 2025.03.05 |
| [SQLD] SQL 기본 : 2절 데이터 정의어 (0) | 2025.03.04 |
| [SQLD] SQL 기본 : 1절 관계형 데이터베이스 개요 (0) | 2025.03.04 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SQL이란
- Scanner
- 데이터베이스
- DBMS
- dialect
- BufferedReader
- SQL
- 알고리즘
- 배열
- 필드
- APS
- DB
- 입출력
- 테이블
- 자료구조
- db오브젝트
- StringBuilder
- BufferedWriter
- 레코드
- Java
- oracle
- db의 역사
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 26 | 27 |
| 28 | 29 | 30 | 31 |
글 보관함