-
Notifications
You must be signed in to change notification settings - Fork 0
seunghun kang edited this page Aug 21, 2024
·
3 revisions
set autocommit = false;
start transaction;
select * from comment where id <= 2000000 and id %2 = 0 for update;
select * from comment;
SELECT * FROM performance_schema.data_locks;
rollback;
- 참고로 for update 대신 for share를 사용하여 read lock을 걸어도 아래의 결과는 동일하다.
- Read Committed에서 for update문(write lock, x-lock)은 조건 절을 통해 레코드에 접근할 때 락을 걸고, 자신이 처리할 레코드가 아니면 즉시 락을 해제한다.
- 결과는 짝수 레코드에만 락이 걸린 것을 확인할 수 있다.
- Repeatable Read에서는 레코드에 락을 걸고, 조건절에 부합하지 않아도 락을 즉시 해제하지 않는다. 즉, 트랜잭션이 끝날 때까지 락을 유지한다.
- 그래서 다른 트랜잭션이 홀수 번 레코드에 어떤 작업을 하려고 시도해도 읽기 및 변경이 불가능하게 된다.
- 결과는 짝수,홀수 모두 락이 걸린 것을 확인할 수 있다.