공부한지 너무 오래 되어서 기억이 가물가물해 다시 정리하고자 한다.. MySQL InnoDB 엔진의 lock에 대해서..
InnoDB는 일반적인 row(이하 '로우') 레벨의 lock(이하 '락')을 지원하고 여기에는 두 종류의 락이 있다.
이 락을 가진 트랜잭션은 로우를 읽을 수 있다.
이 락을 가진 트랜잭션은 로우를 갱신하거나 삭제할 수 있다.
만약 트랜잭션1(T1)이 특정 로우에 대해 shared lock을 갖고 있으면 다른 트랜잭션2(T2)도 해당 로우에 대한 shared lock을 즉시 가질 수 있다. 하지만 T2의 exclusive lock에 대한 요청은 즉시 처리될 수는 없다.(T1 작업이 끝나야 한다는 뜻)
만약 T1이 특정 로우에 대해 exclusive lock을 갖고 있다면 T2는 어느 락을 요청하든 T1이 락을 해제할 때까지 기다려야 한다.
이 밖에
Intention Lock
Record Lock
Gap Lock
Next-key Lock
Insert intention Lock
AUTO-INC Lock
Predicate Locks for Spatial Indexes
가 있다. 이 각각의 Lock들은 뒤에 나오는 각 Transaction Isolation Level을 구현하는 기본이 된다. 자세한 내용은 공식 문서를 참조하세요~