320x100
일반적인 SELECT만 하게 되면 Shared lock 이 걸리므로 여러 세션에서 동시에 데이터에 접근이 가능하게 된다.
Commit 쿼리를 실행하기 전까지 데이터가 변경되지 않으므로, 다른 세션에서 데이터 변경 작업(Update, Delete)이 있는 경우 데이터의 일관성이 깨지게 된다.
대신에 SELECT ~ FOR UPDATE 를 사용하게 되면 반환된 ROW에 대해 row level lock을 걸 수 있다.
다른 세션에서 Select은 가능하나, Update나 Delete 쿼리에 대해 단일 수행과 일관성을 보장하므로 변경할 수 없다.
-- SELECT 할 때 LOCK을 제어할 수 없으면 무한정으로 기다린다.
SELECT c FROM t WHERE key = 1 FOR UPDATE;
-- SELECT 할 때 LOCK을 제어할 수 없으면 에러처리 한다.
SELECT c FROM t WHERE key = 1 FOR UPDATE NOWAIT;
-- SELECT 할 때 LOCK을 제어할 수 없으면 5초 동안 재시도 후 에러처리 한다.
SELECT c FROM t WHERE key = 1 FOR UPDATE WAIT 5;
320x100
'DB > MYSQL' 카테고리의 다른 글
[MariaDB] commands out of sync. Did you run multiple statements at once? (0) | 2022.12.01 |
---|---|
서버에서 DB로 UTF-8 데이터 삽입시 데이터가 깨지는 문제 (0) | 2022.11.08 |
DB Link (0) | 2022.08.31 |
[작성중]MYSQL Connector 8.0 C++ 빌드하기 (0) | 2022.05.19 |
C++ Connector 사용시 conntect 함수에서 std::bad_alloc 발생 (0) | 2022.05.13 |