>  기사  >  데이터 베이스  >  MySQL 팬텀 읽기를 해결하는 방법은 무엇입니까?

MySQL 팬텀 읽기를 해결하는 방법은 무엇입니까?

Guanhui
Guanhui원래의
2020-06-18 15:39:153537검색

MySQL 팬텀 읽기를 해결하는 방법은 무엇입니까?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.