Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- QuerySetAPI
- 알고리즘
- 싸피셜
- Javascript
- git
- SSAFYcial
- 싸피10기
- queryset
- 셀프넘버
- 14658
- 리액트
- 데코레이터
- 머신러닝종류
- Django
- 백준
- PWA
- unionfind
- 싸피
- Python
- SQL
- sqld
- react
- db
- TypeScript
- VITE
- pwa적용하기
- js
- SSAFY
- vitepwa
- 플로이드워셜
Archives
- Today
- Total
Meme's IT
[SQLD] TCL(Transaction Control Language) 본문
들어가기전에,,,
# 트랜잭션 이란?
DB의 논리적 연산 단위, 하나 이상의 SQL문을 포함
- 원자성(Atomicity): 전부 실행되거나 전혀 실행되지 않음(All or Nothing)
- 일관성(Consistency): 트랜잭션으로 인한 DB 상태의 모순이 없음
- 고립성(Isolation): 부분적인 실행 결과에 다른 트랜잭션이 접근할 수 없음, LOCKING으로 고립성 보장
- 영속성(Durability): 트랜잭션의 결과는 영구적으로 저장됨
# TCL
데이터 무결성 보장이 목적임
1) 영구 변경 전 확인
2) 연관 작업 동시 처리 가능
- Oracle에서는 1) SQL 문을 실행하면 트랜잭션이 시작되고 2) TCL을 실행하면 트랜잭션이 종료됨
- DDL를 실행하면 자동으로 커밋 (DML 이후 커밋 없이 DDL을 실행해도 자동 커밋)
- DB를 정상적으로 종료하면 자동 커밋, 정상적인 종료가 아니라면 자동 롤백
근데 여기서 커밋이 뭔데?
# COMMIT
데이터를 DB에 영구적으로 반영하는 명령어
커밋 시 트랜잭션이 완료되어 LOCKING이 해제된다
❎ 커밋 전
- 데이터 변경이 메모리 버퍼에만 영향을 받음 → 복구 가능
- 사용자는 SELECT절로 결과를 확인할 수 있으나 다른 사용자는 불가능
- 변경된 행에 LOCKING이 설정되어 다른 사용자가 변경할 수 없음
✅ 커밋 후
- 변경 사항이 DB에 반영되고 이전 데이터는 복구 불가!!!
- 모든 사용자가 결과를 볼 수 있음
- LOCKING이 해제되어 다른 사용자가 행을 조작할 수 있음
# ROLLBACK
트랜잭션 시작 이전의 상태로 되돌리는 명령어 = COMMIT 이전의 상태로 돌려줌
ROLLBACK 시 LOCKING이 해제됨
- SAVEPOINT(저장점): 트랜잭션 일부만 롤백 할 수 있도록 중간상태를 저장, 동일한 이름이 있다면 나중에 있는 것이 유효
ROLLBACK TO 저장점
- SQL 서버에서는 BEGIN TRAN으로 명시해야 가능함
'공부 > SQLD' 카테고리의 다른 글
[SQLD] 집계함수(GROUP BY, HAVING 등) (0) | 2023.10.31 |
---|---|
[SQLD] WHERE절과 연산자 (0) | 2023.10.30 |
[SQLD] DML(Data Manipulation Language) (0) | 2023.10.30 |
[SQLD] DDL(Data Definition Language) (0) | 2023.10.30 |
[SQLD] 관계형 DB (0) | 2023.10.30 |