>  기사  >  데이터 베이스  >  데이터베이스의 트랜잭션 격리 수준은 무엇입니까?

데이터베이스의 트랜잭션 격리 수준은 무엇입니까?

青灯夜游
青灯夜游원래의
2019-06-12 17:08:3325414검색

데이터베이스 운영에서는 동시에 읽은 데이터의 정확성을 효과적으로 보장하기 위해 트랜잭션 격리 수준이 제안됩니다. 표준 SQL 사양에는 4가지 트랜잭션 격리 수준이 정의되어 있으며, 격리 수준에 따라 트랜잭션을 다르게 처리합니다. 다음 기사에서는 트랜잭션 격리 수준을 소개하겠습니다. 도움이 되길 바랍니다.

데이터베이스의 트랜잭션 격리 수준은 무엇입니까?

일반 데이터베이스에는 네 가지 격리 수준이 있습니다. 격리 수준에 따라 트랜잭션을 다르게 처리합니다.

무단 읽기

커밋되지 않은 읽기라고도 함: 더티 읽기는 허용되지만 손실된 업데이트는 허용되지 않습니다. 트랜잭션이 데이터 쓰기를 시작한 경우 다른 트랜잭션은 동시에 쓸 수 없지만 다른 트랜잭션은 이 데이터 행을 읽을 수 있습니다. 이 격리 수준은 "독점적 쓰기 잠금"을 통해 달성할 수 있습니다.

승인된 읽기

커밋된 읽기라고도 함: 반복 불가능한 읽기는 허용되지만 더티 읽기는 허용되지 않습니다. 데이터를 읽는 트랜잭션을 통해 다른 트랜잭션은 계속해서 데이터 행에 액세스할 수 있지만 커밋되지 않은 쓰기 트랜잭션은 다른 트랜잭션이 해당 행에 액세스하지 못하게 합니다. 이는 "순간 공유 읽기 잠금"과 "독점 쓰기 잠금"을 통해 달성할 수 있습니다.

반복 읽기

비반복 읽기 및 더티 읽기는 금지되지만 팬텀 읽기 데이터가 가끔 발생할 수 있습니다. 데이터를 읽는 트랜잭션은 쓰기 트랜잭션을 비활성화하고(읽기 트랜잭션은 허용) 쓰기 트랜잭션은 다른 트랜잭션을 비활성화합니다. 이는 "공유 읽기 잠금" 및 "독점 쓰기 잠금"을 통해 달성할 수 있습니다.

Serialized

는 엄격한 트랜잭션 격리를 제공합니다. 트랜잭션은 순차적으로 실행되어야 하며 트랜잭션은 하나씩만 실행할 수 있으며 동시에 실행할 수는 없습니다. 트랜잭션 직렬화는 "행 수준 잠금"을 통해서만 달성할 수 없습니다. 방금 쿼리 작업을 실행한 트랜잭션이 새로 삽입된 데이터에 액세스하지 못하도록 하기 위해 다른 메커니즘을 사용해야 합니다.

격리 수준이 높을수록 데이터의 완전성과 일관성이 보장되지만 동시성 성능에 미치는 영향은 더 커집니다. 대부분의 애플리케이션에서는 데이터베이스 시스템의 격리 수준을 커밋된 읽기로 설정하는 데 우선순위를 부여할 수 있습니다. 더티 읽기를 방지하고 동시성 성능이 향상됩니다. 반복 불가능 읽기, 팬텀 읽기 및 유형 II 업데이트 손실과 같은 동시성 문제가 발생하더라도 이러한 문제가 발생할 수 있는 개별 상황에서는 비관적 잠금 또는 낙관적 잠금을 사용하여 애플리케이션에서 이러한 문제를 제어할 수 있습니다.

위 내용은 데이터베이스의 트랜잭션 격리 수준은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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