Correct Execution
다수개의 트랜잭션을 동시에 수행할 때 올바른 트랙잭션 실행 스케쥴은 무엇인가
크게 두가지 기준이 존재한다.
- Conflict serializable
- View serializable
Serial execution 항상 맞다. → 한명이 원하는 것을 다 수행하고 다음 사람 것을 수행하는 방식
- ACID 성질 중 Consistency로 인해 가능하다.
- 성능상의 문제로 이렇게만 진행하기는 현실적으로 불가능
Concurrency Anomalies
: 올바르게 수행하지 못하는 경우 발생하는 현상 (오직3개)
-
Dirty Read (오손 읽기)

- 완료되지 않는 값을 읽는 연산 (읽는것 자체가 문제, 읽지 못하게 해야된다.)
- 롤백을 했다는 것은 write(A) 가 잘못된 것이다. 그런데 중간에 A를 읽어버려서 문제가 생겨버린다.
- A가 결정된 값이 아니기 때문이다.
→ commit 한 이후에만 읽을 수 있도록 해야된다.
-
Lost Update

- T2가 쓴 값을 T1이 덮어쓰게 된다.
- T2의 효과는 DB에서 사라지게 된다.
-
Unrepeatable Read

Schedule(History)
: instruction의 시간적인 순서를 나열한 것이다.
- 모든 명령어가 다 나와야한다.
- 각각의 트랜잭션에 대한 명령어 순서가 보존되어야 한다.
- 마지막문장 : 성공하면 commit , 실패하면 abort
Schedule 1 ,2

