////
Search

Transactions

Dirty Reads

다른 트랜잭션이 커밋하지 않은 것에 대해서 볼 수 있는 상태를 의미함

Read commited

한 트랜잭션 안에서 볼 수 있는 값이 바뀔 수 있음
이걸 해결한게 Repeatable read 임

Repeatable Read

MVCC를 이용해서 해결함
변경 전의 레코드를 언두 공간에 백업해두는 것임
백업 레코드에는 어느 트랜잭션에 의해 저장되었는지를 틀내잭션 번호를 함께 저장함
이 트랜잭션 번호를 참고해서 자신보다 먼저 실행된 트랜잭션의 데이터만을 조회함. 자신보다 이후에 실행된 데이터가 존재하면 언두 로그를 참고해서 데이터를 조회함.
한 트랜잭션에서 업데이트 하는 경우에는 같은 결과를 뱉지만, insert의 경우에는 없던 row가 보일 수 있음. 이게 phantom read임
사용자가 select for update로 데이터를 조회한 경우에 mysql은 해당 레코드 + 큰 범위에는 갭락을 건다.
따라서 이 과정에서 insert를 시도하면 갭 락 때문에 대기가 걸린다.
따라서 mysql에서는 팬텀리드가 잘 일어나지 않는다. mysql에서 일어나려면 잠금 없이 읽기했다가 잠금으로 읽기를 해야함.

Serializable

모든 select 수준에도 shared lock으로 잠금을 건다.