전 포스트
https://velog.io/@imprity/Database%EC%99%80-Race-Condition-1
그럼 이의 대한 첫번째 해결방안 PESSIMISTIC LOCKING을 살펴보자.
뭔가 복잡할거 같지만 실제로는 간단하다. 첨 읽을 때 lock을 걸어주는 것이다.

전에랑 마찬가지로 읽은 값을 바탕으로 재고를 차감한다.
이때
select * from products;
가 아닌
select * from products for update;
를 쓴다!
그리고 오른쪽이 똑같이
select * from products for update;
할려고 하면 block이 된다!

그리고 왼쪽이 commit을 하면 오른쪽이 값을 볼 수 있는데 오른쪽은 왼쪽이 commit을 한 후에만 값을 볼 수 있으므로 9를 보게 된다.

그럼 오른쪽도 9를 보고 '어, 재고가 9개네, 8개로 줄여하지 하고' 재고를 8로 업데이트 한다.

이를 통해 재고를 두번 차감할 경우 8개로 정상적으로 차감 된 것을 확인할 수 있다.

이에 대해 더 자세히 공부할려면 https://dev.mysql.com/doc/refman/8.4/en/update.html 참고