PL/SQL의 트랜잭션
트랜잭션의 시작과 끝
-
COMMIT
트랜잭션이 갱신한 내용을 데이터베이스에 모두 반영하고 트랜잭션을 완료
-
ROLLBACK
트랜잭션이 갱신한 내용을 데이터베이스에서 모두 되돌리고 트랜잭션을 철회
-
SAVEPOINT
트랜잭션 내에 저장점을 표시해서 트랜잭션을 더 작은 부분으로 나눔
-
ROLLBACK TO SAVEPOINT
트랜잭션 내부의 저장점 이후에 갱신된 내용만 되돌림
-set autocommit on;
을 통해 각 DML을 한 트랜잭션으로 처리
트랜잭션의 속성
SET TRANSACTION READ ONLY;
로 선언된 트랜잭션은 읽기 전용이므로, 갱신작업이 아래에 오는 것을 허용하지 않음

↑ 읽기 전용 DML이므로 사용 가능

↑ 갱신 전용 DML이므로 사용 불가능
SET TRANSACTION READ WRITE;
로 선언시 읽기 쓰기가 가능
고립 수준
SET TRANSACTION READ WRITE
ISOLATION LEVEL (고립 수준);
- 다른 트랜잭션과의 영향을 얼마나 주는지의 척도
- 낮을 수록 동시성↑ 데이터 정확성 ↓
- 높을 수록 동시성↓ 데이터 정확성 ↑
READ UNCOMMITTED
- 가장 낮은 고립 수준
- 트랜잭션 내의 질의가 공유 로크를 걸지 않고 데이터를 읽음
- 오손 데이터 읽기 발생
- 갱신하려는 데이터에 대해서는 독점 로크를 걸고, 끝날 때까지 보유
READ COMMITTED
- 트랜잭션 내의 질의들이 읽으려는 데이터에 공유 로크를 걸고, 읽기가 끝나자마자 로크를 해제함
- 반복할 수 없는 읽기 발생
- 갱신하려는 데이터에 대해서는 독점 로크를 걸고, 끝날 때까지 보유
- PL/SQL에서의 디폴트
REPEATABLE READ
- 질의에서 검색되는 데이터에 공유 로크를 걸고, 트랜잭션이 끝날 때까지 보유
- 팬텀 문제 발생
- 갱신하려는 데이터에 대해서는 독점 로크를 걸고, 끝날 때까지 보유
SERIALIZABLE
- 가장 높은 고립 수준
- 검색되는 데이터 뿐만 아니라 인덱스에 대해서도 공유 로크를 걸고, 트랜잭션이 끝날 때까지 보유
- 갱신하려는 데이터에 대해서는 독점 로크를 걸고, 끝날 때까지 보유
- SQL2에서의 디폴트