db에 row(로우)에 하나씩 걸려있는 잠물쇠같은 것이다.
위 와같은 db 데이터가 있다고 하자.
item에 macbook과 ipad가 있고 price에 macbook의 가격은 1000원 ipad의 가격은 500이다.
맥북과 아이패드를 만드는 A라는 회사에서 두명의 관리자가 macbook과 ipad의 가격을 수정하려고 한다.
그 때 조금이라도 0.000000000000000000001초라도 빠른 A관리자가 db에 접속을 했다. 그리고 각각의 row에 있는 락을 획득 한 후 200원씩 가격을 올렸다.
조금 늦은 관리자B는 관리자A의 트랜잭션이 끝나면(수정) 락이 반환되고 난 후 수정을 할 수가 있기에,
락을 획득하기 전까지 대기해야된다. 각각의 db마다 다르지만, 락을 획득을 위해 대기하는 락 타임아웃 시간이 초과하게 된다면, 수정 sql문에 예외가 발생한다.
조회의 경우는 admin A가 commit를 하기 전까지 원래 가지고 있던 데이터가 조회된다.
adminB가 데이터를 조회 할 때도 commit를 하기 전이므로 amdinB의 데이터에는 commit되기 전의 데이터가 보여지게 된다.
만약에 조회시에도 락을 가져가서 다른 곳에서 사용을 못하게 하고 싶다면, 조회시에도 update query를 작성해주면 된다.