Table-Level Locking
read lock
LOCK TABLES table READ; UNLOCK TABLES;
write lock
LOCK TABLES table WRITE; UNLOCK TABLES;
Row-Level Locking
주의 해야할것은 MySQL이 조회된 행을 기억하는 방법이 인덱스 범위를 기억하는 것이므로 조건 필드에 인덱스가 없으면 전체 테이블에 lock 이 걸립니다.
START TRANSACTION; SELECT * FROM tb_stock WHERE id=1 FOR UPDATE; COMMIT;
공유모드로 잠그면 다른 세션에서 읽기는 가능하고 수정, 삭제는 못하도록 할 수 있습니다
Optimistic Lock
SELECT quantity, opt_flag FROM tb_stock WHERE id = 1; UPDATE tb_stock SET quantity=quantity-1 WHERE quantity-1 >= 0 AND id = 1;


Seonglae Cho