SQL LOCK

SQL LOCK

Creator
Creator
Seonglae ChoSeonglae Cho
Created
Created
2020 Jan 13 3:2
Editor
Edited
Edited
2022 Jul 11 16:3
Refs
Refs

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;
 
 
 
MySQL locking - Table-Level Locking, Row-Level Locking, Optimistic Locking
웹 프로그래밍은 기본적으로 다중 사용자 환경입니다. 동일한 자원에 여러 사용자가 동시에 접근하는 상황이 발생할 수 있습니다. 쇼핑몰에서 물건을 구매하는 상황을 생각해 봅시다. 두 명의 사용자가 재고가 하나밖에 없는 제품을 조회하고, 동시에 구매를 한 상황입니다. 서버로 요청이 넘어가면 서버에서는 다음 세 단계를 거쳐 구매를 처리한다고 가정해 봅니다.
MySQL locking - Table-Level Locking, Row-Level Locking, Optimistic Locking
 
 

Recommendations