[DB] Transaction
<Transaction>
=논리적인 작업의 단위. 분리되어서는 안된다
commit, rollback으로 적용하거나 종료할 수 있다
DCL, DDL 실행으로 자동 커밋되기도 한다
데이터베이스 비정상적으로 종료되면 변경사항이 취소된다.
1. 명시적 transaction
=commit, rollback등으로 적용하거나 종료하는 것
트랜잭션 논리 제어
COMMIT | 데이터 영구 변경, 현재 트랜잭션 종료 |
SAVEPOINT | savePoint지정 |
ROLLBACK | 미결정 데이터 버리고 트랜잭션 종료. ROLLBACK TO 세이브포인트 이름 = 해당 savePoint와 그다음 변경들을 버린다 |
COMMIT, ROLLBACK 사용 장점
데이터 일관성 제공
데이터 영구적으로 변경하기 전에 데이터 변경 미리 확인 가능
관련 된 작업을 논리적으로 그룹화
하나의 트랜잭션이 끝난 후 다음의 실행 가능한 SQL문장은 자동적으로 다음 트랜잭션 시작
2. 암시적 transaction
=DDL문장 완료, DCL문장 완료시 자동 commit된다.
SQL plus 비정상 종료하거나 시스템이 실패되면 자동 rollback된다. → 데이터 무결성 보호
AUTOCOMMIT
=DML실행시 자동으로 commit되게 할 것인지 정할 수 있다.
--on으로 변경
set autocommit on
show autocommit
--Off로 변경
set autocommit off
show autocommit
SAVEPOINT, ROLLBACK
=savepoint로 작업을 되돌릴 수 있다
delete from emps where department_id=20;--TASK1
savepoint delete_20; --set rollback point
delete from emps where department_id=30; --TASK2
rollback to savepoint delete_20; --TASK2가 취소된다
<LOCK>
읽기 일관성
=항상 데이터 검색이 일관되게 보증한다.
트랜잭션 때문에 잠긴다. 이것을 사용해서 읽기 일관성을 보증할 수 있다.
읽기 일관성의 중요성
- 데이터베이스 reader, writer는 일관된 데이터를 보게 된다
- reader는 변경 중인 데이터는 보지 않는다
- writer는 데이터베이스에 대해 일관되게 수행된 변경을 보증한다
- 하나의 writer에 의해 만들어진 변경은 다른 writer가 만드는 변경과 충돌하지 않는다.
LOCK
Table Level Lock
= 테이블의 모든 행을 잠금.
exclusive mode=최고 레벨의 테이블 잠금. 읽기만 가능하고 입력 수정 안됨
그 외 모드들 = row share, row exclusive, share update, share, share row exclusive, exclusive
lock table 테이블명 in exclusive mode;
Row Level Lock
= 특정 행만 잠금
DML과 LOCK