더티리딩이란 무엇인가요?
잘못된 데이터 읽기라고도 알려진 더티 읽기(Dirty read)는 데이터베이스 액세스 중에 트랜잭션 T1이 특정 값을 수정한 다음 트랜잭션 T2가 해당 값을 읽은 다음 어떤 이유로든 T1이 값 수정을 취소하는 것을 의미합니다. 이로 인해 T2가 읽은 데이터가 유효하지 않게 됩니다. 더티 읽기는 일반적으로 업데이트 작업을 대상으로 한다는 점은 주목할 가치가 있습니다.
Solution
mysql 데이터베이스는 네 가지 격리 수준을 정의합니다.
직렬화 가능: 더티 읽기, 반복 불가능 읽기 및 가상 읽기의 발생을 방지할 수 있습니다.
반복 읽기: 더티 읽기와 반복 불가능한 읽기를 방지할 수 있습니다.
읽기 커밋: 더티 읽기를 피할 수 있습니다.
커밋되지 않은 읽기: 가장 낮은 수준에서 발생합니다.
참고: 트랜잭션의 격리 수준은 데이터베이스에 의해 제한됩니다. 서로 다른 데이터베이스에서 지원하는 격리 수준은 반드시 동일하지는 않습니다.
더티 읽기: 수정 시 배타적 잠금을 추가하고 이후에 해제합니다. 공유 잠금이 발생한 후에는(트랜잭션 1이 데이터를 읽는 동안 다른 트랜잭션이 데이터를 수정하지 않도록) 해당 데이터에 대한 작업이 허용되지 않으며 읽기만 가능합니다. 트랜잭션 1에 업데이트 작업이 있으면 배타적 잠금을 사용하여 다른 트랜잭션은 읽기 및 쓰기에 참여할 권한이 없으므로 더티 읽기 문제를 방지합니다. 그러나 트랜잭션 1이 데이터를 읽을 때 다른 트랜잭션도 발생할 수 있습니다. 읽기가 완료된 후 공유 잠금이 해제됩니다. 이때 트랜잭션 1은 데이터를 수정하고 수정 후 트랜잭션을 커밋합니다. -반복 읽기 문제가 발생합니다. 따라서 반복 불가능 읽기 문제를 피할 수 없습니다.
다른 격리 수준을 실행하면 다양한 문제가 발생할 수 있습니다. 아래에 요약되어 있으며 예가 제공됩니다.
한 트랜잭션 A가 다른 트랜잭션 B에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽을 때 더티 읽기가 발생합니다. B가 롤백하면 트랜잭션 A가 잘못된 데이터를 읽습니다. 이는 반복 불가능한 읽기와 유사하지만 두 번째 트랜잭션은 커밋할 필요가 없습니다.
추천 튜토리얼: "
PHP Tutorial" "MySQL Tutorial"
위 내용은 더러운 독서란 무엇인가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!