DB의 트랜잭션은 ACID를 보장해야 한다. (참고: https://feco.tistory.com/45)
- 원자성, 일관석, 격리성, 지속성
Atomicity: 한트랜잭션이 여러query로 이루어질 수 있는데, 한 트랜잭션의 모든 query가 성공하거나, 혹은 part of transaction이 실패하면 전체 transaction이 실패/혹은 rollback해야한다.
Consistency: 트랜잭션후에도 DB는 항상 valid state 를 유지해야 한다.(for각종 constraint들 enabled in DB)
Isolation : 동시에 여러개의 transaction이 실행되더라도 하나씩 고립되어 순차적으로 실행되어야한다.
Durability: 트랜잭션이 commit되고 나면, 항상 available해야한다. server가 꺼졌다 켜지더라도...
이중, "I"인 Isolation(격리성의) 수준은 (참고: https://m.blog.naver.com/PostView.nhn?blogId=blueaian&logNo=220636152759&proxyReferer=https:%2F%2Fwww.google.com%2F )
- READ UNCOMMITED (dirty read 발생가능 + 아래들)
: 일반적인 Database에서는 사용하지 않음
- READ COMMITED (none-repeatable read 발생가능 + 아래 )
: Oracle 트랜잭션 격리 수준 ( OLTP에서 많이 채택 )
: commit된 데이터에 대해 다른 세션에서 읽을 수 있음
- REPEATABLE READ (Phantom Read발생가능)
: Mysql 기본 격리수준
: select 에 대해서도 MVCC 수준 유지
- SERIALIZABLE
: 동시성이 중요한 Database에서는 사용하지 않음