SELECT
SELECT FOR UPDATE
격리 수준과 무관하게 항상 최신 커밋 데이터를 조회한다. 따라서 단순 SELECT와 다른 결과를 반환할 수 있다

단점
일반적인 프로그램 구현에서 SELECT FOR UPDATE로 데이터 조회 후, DB 외에 원격 서버로 처리를 요청하는 경우가 많다. 그런데 원격 서버의 응답이 느려지면 MySQL 서버의 트랜잭션도 계속 활성 상태로 남아 있게 된다. 결과적으로 레코드의 잠금이 풀리지 않아서 다른 트랜잭션 처리가 막히는 문제가 생길 수 있다.
개선하기
업데이트 대상이 희박한 경우 WHERE절에 추가 조건을 명시한다.
// 꼭 필요한 경우에만 잠금을 걸고 실행하게 된다.
SELECT * FROM wallet WHERE user_id = 'A' AND balance >= 10억 FOR UPDATE
SELECT FOR SHARE:
부모 테이블의 SELECT와 자식테이블의 INSERT 시점 사이에, 부모 데이터 삭제를 방지한다.

단점
Deadlock 가능성이 매우 높은 잠금이다.
(예시) 게시물-댓글 테이블의 OneToMany로 존재하고 댓글이 작성되면 게시물 테이블에 댓글 숫자가 업데이트 된다.
