PHP 트랜잭션의 네 가지 주요 기능
트랜잭션은 원자성 SQL 쿼리 집합 또는 독립적인 작업 단위입니다.
원자성:
트랜잭션은 데이터베이스의 논리적 작업 단위입니다. 데이터베이스에 대한 모든 수정 사항은 실행되거나 실행되지 않습니다.
일관성:
데이터베이스 상태는 트랜잭션 전후의 모든 무결성 제약 조건을 충족합니다.
격리:
동시에 실행되는 트랜잭션은 격리되며 하나가 다른 트랜잭션에 영향을 주지 않습니다. 두 개의 트랜잭션이 동시에 실행되어 동일한 기능을 수행하는 경우 트랜잭션 격리를 통해 시스템의 각 트랜잭션은 해당 트랜잭션만 시스템을 사용하고 있다고 생각하게 됩니다. 이 속성을 직렬화라고도 합니다. 트랜잭션 작업 간의 혼동을 방지하려면 동일한 데이터에 대해 동시에 하나의 요청만 있도록 요청을 직렬화하거나 역직렬화해야 합니다.
데이터베이스의 격리 수준을 설정하면 다양한 격리 효과를 얻을 수 있습니다.
내구성:
트랜잭션이 완료된 후 트랜잭션으로 인해 데이터베이스에 적용된 변경 사항이 데이터베이스에 유지되며 롤백되지 않습니다.
PHP 트랜잭션의 동시성 문제
1. 더티 읽기
트랜잭션 A가 트랜잭션 B가 업데이트한 데이터를 읽은 다음 B가 작업을 롤백하고 A가 읽은 데이터는 더티 데이터입니다.
2. 반복 불가능한 읽기
트랜잭션 A는 동일한 데이터를 여러 번 읽고, 트랜잭션 B는 트랜잭션 A를 여러 번 읽는 동안 데이터를 업데이트하고 커밋하므로 트랜잭션 A는 동일한 데이터를 여러 번 읽습니다. 결과가 일치하지 않습니다.
3. 환상 읽기
시스템 관리자 A는 데이터베이스에 있는 모든 학생의 성적을 특정 점수에서 ABCDE 등급으로 변경했지만 시스템 관리자 B는 이때 시스템 관리자가 A 이후에 특정 점수의 기록을 삽입했습니다. 변경이 완료되었는데 아직 변경되지 않은 기록이 하나 남아 있는 것을 발견했습니다. 이것은 마치 환각이라고 불리는 것이었습니다.
요약: 비반복 읽기와 환상 읽기는 쉽게 혼동됩니다. 비반복 읽기는 수정에 중점을 두고, 환상 읽기는 추가 또는 삭제에 중점을 둡니다. 반복 불가능한 읽기 문제를 해결하려면 조건에 맞는 행만 잠그면 되고, 팬텀 읽기 문제를 해결하려면 테이블을 잠그면 됩니다.
추천 튜토리얼: PHP 비디오 튜토리얼
위 내용은 PHP 트랜잭션이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!