MySQL 팬텀 리딩을 해결하는 방법은 무엇입니까?
1. MVCC 스냅샷은 기록 데이터를 스냅샷에 저장하여 트랜잭션이 데이터를 추가하고 삭제할 때 현재 트랜잭션이 보이지 않도록 합니다.
대부분의 데이터베이스는 다중 버전 동시성 제어를 구현하며 이는 모두 데이터 스냅샷을 저장하여 달성됩니다.
InnoDB를 예로 들면 각 줄마다 두 개의 중복된 단어 구분이 있습니다. 하나는 행의 생성된 버전이고 다른 하나는 행의 삭제된(만료된) 버전입니다. 버전 번호는 각 트랜잭션마다 자동으로 증가합니다. 트랜잭션이 데이터를 가져올 때마다 생성 버전이 현재 트랜잭션 버전보다 작은 데이터와 만료된 버전이 현재 버전보다 큰 데이터를 가져옵니다.
보통 셀렉트는 스냅샷 리딩입니다.
select * from T where number = 1;
2. "다음 키" 잠금은 현재 데이터 행과 이전 데이터 및 다음 데이터 사이의 간격을 잠궈 이 범위 내에서 읽은 데이터가 일관되도록 합니다.
다음-키 잠금은 두 부분으로 구성됩니다
레코드 잠금(행 잠금)
Gap 잠금
레코드 잠금은 인덱스에 추가되는 잠금이고, 인덱스 사이에 Gap 잠금이 추가됩니다. (생각: 열에 인덱스가 없으면 어떻게 될까요?)
select * from T where number = 1 for update; select * from T where number = 1 lock in share mode; insert update delete
추천 튜토리얼: "MySQL Tutorial"
위 내용은 MySQL 팬텀 읽기를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!