집 >데이터 베이스 >MySQL 튜토리얼 >MySQL의 4가지 트랜잭션 격리 수준
권장(무료): mysql tutorial
이 기사의 실험을 위한 테스트 환경: Windows 10+cmd+MySQL 5.6 . 36 +InnoDB
1. 트랜잭션의 기본 요소(ACID)
1. 원자성: 트랜잭션이 시작된 후 모든 작업이 완료되거나 완료되지 않으며 중간에 정체가 불가능합니다. 링크. 트랜잭션 실행 중 오류가 발생하면 트랜잭션이 시작되기 전 상태로 롤백되어 모든 작업이 발생하지 않은 것처럼 처리됩니다. 즉, 물질의 기본 단위인 화학에서 배운 원자와 마찬가지로 사물은 분할할 수 없는 전체입니다.
2. 일관성: 트랜잭션 시작 및 종료 전후에 데이터베이스의 무결성 제약 조건을 위반하지 않습니다. 예를 들어, A가 B에게 돈을 이체하면 A는 돈을 공제할 수 없지만 B는 돈을 받지 못합니다.
3. 격리: 동시에 하나의 트랜잭션만 동일한 데이터를 요청할 수 있으며 서로 다른 트랜잭션 간에 간섭이 없습니다. 예를 들어, A는 은행 카드에서 돈을 인출하고 있습니다. B는 A의 인출 절차가 완료되기 전에는 이 카드로 돈을 이체할 수 없습니다.
4. 내구성: 트랜잭션이 완료된 후 트랜잭션으로 인해 데이터베이스에 대한 모든 업데이트가 데이터베이스에 저장되며 롤백할 수 없습니다.
2. 트랜잭션 동시성 문제
1. 더티 읽기: 트랜잭션 A가 트랜잭션 B가 업데이트한 데이터를 읽은 다음 B가 작업을 롤백하고 A가 읽은 데이터가 더티 데이터입니다.
2 반복 불가능 읽기: 트랜잭션 A는 동일한 데이터를 여러 번 읽고, 트랜잭션 B는 트랜잭션 A를 여러 번 읽는 동안 데이터를 업데이트하고 커밋합니다. 따라서 트랜잭션 A가 동일한 데이터를 여러 번 읽으면 결과가 일치하지 않습니다.
3. 가상 읽기: 시스템 관리자 A가 데이터베이스 내 모든 학생의 성적을 특정 점수에서 ABCDE 등급으로 변경했지만 시스템 관리자 B는 이때 특정 점수의 기록을 삽입했습니다. 수정 후 시스템 관리자. 마치 환각에 빠진 것처럼 아직 수정되지 않은 기록이 하나 남아 있는 것을 발견했습니다.
요약: 비반복 읽기와 환상 읽기는 쉽게 혼동됩니다. 비반복 읽기는 수정에 중점을 두고, 환상 읽기는 추가 또는 삭제에 중점을 둡니다. 반복 불가능 문제를 해결하려면 조건을 충족하는 행만 잠그면 됩니다. 팬텀 읽기 문제를 해결하려면 테이블을 잠그면 됩니다. 3. MySQL 트랜잭션 격리 수준
Read-uncommitted | Yes | Yes | |
Nonrepeatable Read-committed | No | Yes | |
반복 읽기(반복 가능- 읽기) | 아니요 | 아니요 | |
직렬화 가능(직렬화 가능) | No | 아니요 | |
위 내용은 MySQL의 4가지 트랜잭션 격리 수준의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!