1. 트랜잭션의 네 가지 주요 특징
원자성: 트랜잭션이 시작된 후 모든 작업이 완료되거나 완료되지 않으며 중간에 정체될 수 없습니다. 트랜잭션 실행 중 오류가 발생하면 트랜잭션이 시작되기 전 상태로 롤백되어 모든 작업이 발생하지 않은 것처럼 처리됩니다.
일관성: 트랜잭션 시작 전후에 데이터베이스의 무결성 제약 조건을 위반하지 않습니다.
격리: 하나의 트랜잭션만 동시에 동일한 데이터를 요청할 수 있으며 서로 다른 트랜잭션 간에 간섭이 없습니다.
내구성: 트랜잭션이 완료된 후 트랜잭션으로 인해 데이터베이스에 대한 모든 업데이트가 데이터베이스에 저장되며 롤백할 수 없습니다.
2. 트랜잭션 동시성 문제
더티 읽기: 트랜잭션 A가 트랜잭션 B가 업데이트한 데이터를 읽은 다음 B가 작업을 롤백한 다음 A가 읽은 데이터는 더티 데이터입니다.
반복 불가능한 읽기: (트랜잭션 A는 동일한 데이터를 여러 번 읽고, 트랜잭션 A는 동일한 데이터를 여러 번 읽는 동안 트랜잭션 B는 데이터를 업데이트하고 커밋하므로 트랜잭션 A가 동일한 데이터를 여러 번 읽을 때 일관성 없는 결과가 발생합니다. (강조: 데이터 수정) 읽기: 시스템 관리자 A가 데이터베이스의 모든 학생의 성적을 특정 점수에서 ABCDE 등급으로 변경했지만 시스템 관리자 B는 이때 특정 점수에 대한 기록을 삽입했습니다. 시스템 관리자 A가 변경을 완료했을 때 그는 또 다른 기록이 있음을 발견했습니다. 마치 환각이 발생한 것처럼 변하지 않았습니다. 이것을 환상 읽기라고 합니다. (핵심: 데이터 추가 또는 삭제)
요약: 비반복 읽기와 팬텀 읽기는 혼동되기 쉽습니다. 비반복 읽기는 수정에 중점을 두고, 팬텀 읽기는 추가 또는 삭제에 중점을 둡니다. 반복 불가능한 읽기 문제를 해결하려면 조건에 맞는 행만 잠그면 됩니다. 팬텀 읽기 문제를 해결하려면 테이블을 잠그면 됩니다
3. MySQL 트랜잭션 격리 수준READ UNCOMMITED (커밋되지 않은 데이터는 읽을 수 있음, 더티 읽기(dirty read), 이러한 데이터를 더티 데이터라고 합니다.)
COMMITTED READ (READ COMMITED) (커밋된 데이터는 읽을 수 있지만 반복할 수 없음)
RePEATABLE READ) 트랜잭션 실행 중에 표시되는 데이터는 항상 이는 이 트랜잭션이 시작되었을 때 표시된 데이터와 일치합니다. 물론 반복 가능한 읽기 격리 수준에서는 커밋되지 않은 변경 사항도 다른 트랜잭션에서 볼 수 없습니다.
SERIALIZABLE(읽기 작업은 암시적으로 공유 잠금을 획득하므로 서로 다른 트랜잭션 간의 상호 배제를 보장할 수 있습니다. 잠금 테이블로 아무것도 할 생각하지 마세요. 단점도 분명합니다. 잠금 테이블을 보면 이해하게 될 것입니다. 하, 효율성 문제)
추천 튜토리얼: "
Mysql Tutorial위 내용은 MySQL 트랜잭션의 4가지 격리 수준의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!