목차
1. 데이터베이스 트랜잭션의 올바른 실행을 위한 4가지 기본 요소
2. 데이터베이스 트랜잭션 격리 수준
3. 요약
데이터 베이스 MySQL 튜토리얼 데이터베이스 트랜잭션 격리 수준과 더티 읽기, 반복 불가능한 읽기 및 팬텀 읽기를 이해하는 방법

데이터베이스 트랜잭션 격리 수준과 더티 읽기, 반복 불가능한 읽기 및 팬텀 읽기를 이해하는 방법

Sep 15, 2018 am 11:36 AM

이 문서의 내용은 데이터베이스 트랜잭션 격리 수준과 더티 읽기, 반복 불가능한 읽기 및 팬텀 읽기를 이해하는 방법에 대한 내용입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다. 너.

1. 데이터베이스 트랜잭션의 올바른 실행을 위한 4가지 기본 요소

1.1 ACID 원칙.

  ACID 원칙은 데이터베이스 트랜잭션의 정상적인 실행을 위한 네 가지 기본 요소로 원자성, 일관성, 독립성 및 내구성을 나타냅니다.

  트랜잭션의 원자성(원자성)은 트랜잭션이 완전히 실행되거나 실행되지 않음을 의미합니다. 즉, 트랜잭션이 중간에 실행되고 중지될 수는 없습니다. , 이 거래는 두 단계로 나눌 수 있습니다: 1. 카드를 긁는 것, 2. 돈을 인출하는 것. 카드를 긁어도 돈이 나오지 않을 수 있습니다. 이 두 단계는 동시에 완료되어야 합니다. 그렇지 않으면 전혀 완료되지 않습니다.

트랜잭션 일관성(일관성)은 트랜잭션 작업이 데이터베이스에 있는 데이터의 일관성을 변경하지 않는다는 것을 의미합니다. 예를 들어 무결성 제약조건 a+b=10에서 트랜잭션이 a를 변경하면 b도 그에 따라 변경되어야 합니다. 즉, A가 B에게 300위안을 송금하면 A의 계좌는 300위안이 줄어들고, B의 계좌는 300위안이 늘어나야 하는 등 200위안 등의 증감이라고 할 수 없습니다. . 이는 트랜잭션 원자성과 일치하지만 트랜잭션 일관성을 준수하지 않습니다. 실제 비즈니스에서는 물건을 구매할 때 재고를 차감하는 것과 유사한 논리인 경우가 많습니다. 그러면 설계 결함으로 인해 메인 테이블에 재고가 있고, 재고 테이블에 재고가 있습니다. , 거래가 추가되더라도 여전히 나타납니다. 이는 과판매 및 SKU 재고가 전체 재고와 일치하지 않는 문제를 해결하기 위해 일관성이 만족되지 않음을 의미합니다.

  독립성(격리): 트랜잭션의 독립성을 격리라고도 합니다. 이는 두 개 이상의 트랜잭션이 인터리브된 상태로 실행되지 않음을 의미합니다. 이는 데이터 불일치로 이어질 수 있기 때문입니다.

  지속성(지속성): 트랜잭션이 커밋되거나 롤백되면 격리로 인해 발생할 수 있는 읽기 문제에 관계없이 이 상태가 데이터베이스에 지속되어야 합니다.


1.2 더티 읽기, 반복 불가능 읽기, 팬텀 읽기.

Dirty read(더티 읽기): 다른 트랜잭션에서 커밋되지 않은 한 트랜잭션의 데이터를 읽습니다. 예를 들어, 트랜잭션이 데이터에 액세스하고 데이터를 수정했지만 수정 사항이 아직 데이터베이스에 커밋되지 않은 경우 다른 트랜잭션도 데이터에 액세스한 다음 해당 데이터를 사용합니다.

  NonRepeatable Read(NonRepeatable Read): 동일한 데이터 내용을 읽을 수 없습니다. 이는 트랜잭션 내에서 동일한 데이터가 여러 번 읽혀지는 것을 의미합니다. 그런 다음 두 트랜잭션 사이의 수정으로 인해 첫 번째 트랜잭션의 두 데이터 읽기 사이에 다른 트랜잭션도 동일한 데이터에 액세스하고 이를 수정합니다. 첫 번째 트랜잭션에서 두 번 읽은 데이터는 다를 수 있습니다.

  Phantom Read(Phantom Read): 트랜잭션에서 두 쿼리의 결과가 일치하지 않습니다(삽입 작업의 경우). 트랜잭션이 독립적으로 실행되지 않을 때 발생하는 현상을 말합니다. 예를 들어 첫 번째 트랜잭션이 테이블의 데이터를 수정하는데, 이 수정에는 테이블의 모든 데이터 행이 포함됩니다. 동시에 두 번째 트랜잭션도 이 테이블의 데이터를 수정합니다. 이 수정으로 인해 테이블에 새 데이터 행이 삽입됩니다. 그러다가 첫 번째 트랜잭션을 수행한 사용자가 테이블에 수정되지 않은 데이터 행이 아직 남아 있음을 발견하면 이는 착각과 같습니다.
 예를 들어, 편집자는 작성자가 제출한 문서를 변경했지만 프로덕션에서 변경 사항을 문서의 마스터 사본에 병합할 때 작성자가 편집되지 않은 새 자료를 문서에 추가한 것으로 밝혀졌습니다. 편집자와 제작 부서가 원본 문서 작업을 마칠 때까지 누구도 문서에 새 자료를 추가할 수 없다면 이 문제를 피할 수 있습니다.


2. 데이터베이스 트랜잭션 격리 수준

데이터베이스 트랜잭션에는 낮은 수준부터 높은 수준까지 4가지 격리 수준이 있습니다. 커밋되지 않은 읽기(커밋되지 않은 읽기), 커밋된 읽기(커밋된 읽기), 반복 가능한 읽기(반복 가능한 읽기), 직렬화 가능( 직렬화), 이 네 가지 수준은 더티 읽기, 반복 불가능 읽기 및 팬텀 읽기 문제를 하나씩 해결할 수 있습니다.

2.1 Read uncommitted

 회사에서 급여를 지급했는데 리더가 5,000위안을 singo의 계좌로 이체했는데 거래가 제출되지 않았고 singo가 우연히 계좌를 확인해보니 급여가 5,000위안인 것을 알게 되어서 매우 기뻤습니다. 불행하게도 리더는 singo에게 지급되는 급여가 2,000위안이어야 한다는 것을 알고 신속하게 거래를 롤백(5,000위안으로 롤백)하고 금액을 수정(2,000위안)한 후 마침내 거래를 제출했습니다. 실제로 singo는 급여를 제출했습니다. 가격은 2,000위안이고 Singo는 만족합니다.

 위의 상황이 발생합니다. 이는 더티 읽기(dirty reading), 두 개의 동시 트랜잭션, "트랜잭션 A: 리더가 singo에 급여를 지불합니다", "트랜잭션 B: singo가 급여 계정을 쿼리합니다", 트랜잭션 B는 트랜잭션 A를 읽었지만 읽지 않았습니다. 아직 데이터를 제출했습니다.

 격리 수준을 Read uncommitted(read uncommitted)로 설정한 경우 더티 읽기가 발생할 수 있습니다. 이때 격리 수준을 Read commit(read commit)으로 높이면 더티 읽기를 방지할 수 있습니다.


2.2 읽기 완료

singo는 자신의 급여 카드를 가지고 물건을 구매했는데 시스템에 실제로 카드에 2,000위안이 있는 것으로 확인되었습니다. 이때 그녀의 아내는 우연히 온라인으로 돈을 이체하고 있었고 singo의 급여 카드에서 2,000위안을 다른 계좌로 이체했습니다. 싱고가 돈을 공제할 때 시스템에서 싱고의 급여카드에 돈이 없는 것을 확인했고, 싱고는 카드에 돈이 있어서 어떻게 됐는지 의아해했습니다.

  위의 상황이 발생하는데, 이를 반복 불가능 읽기라고 하며 두 개의 동시 트랜잭션, "거래 A: singo 소비", "거래 B: singo 아내 온라인 전송", 트랜잭션 A가 미리 데이터를 읽었고, 트랜잭션 B 데이터를 업데이트하고 트랜잭션을 커밋한 직후 트랜잭션 A가 데이터를 다시 읽으면 데이터가 변경되었습니다.

 격리 수준을 읽기 커밋으로 설정하면 더티 읽기는 방지되지만 반복 불가능한 읽기가 발생할 수 있습니다(동일한 데이터 콘텐츠를 읽을 수 없음).

  Sql Server, Oracle 등 대부분의 데이터베이스의 기본 수준은 읽기 커밋입니다. 이때 격리 수준을 반복 읽기로 높이면 더티 읽기 및 반복 불가능 읽기를 피할 수 있습니다.


2.3 반복 읽기

 격리 수준을 반복 읽기로 설정하면 반복 불가능 읽기를 피할 수 있습니다. singo가 급여 카드를 가져와 소비할 때 시스템이 급여 카드 정보를 읽기 시작하면(즉, 거래가 시작됨) singo의 아내는 기록을 수정할 수 없습니다. 즉, singo의 아내는 이때 돈을 이체할 수 없습니다.

   (여기 두 블로그의 예시는 서로 다릅니다. 이유를 명시해 주세요.) 즉, 세션 A와 B가 있고 각각 두 개의 거래가 열리고 A가 B에게 500위안을 이체한 후 A가 이체합니다. 트랜잭션을 제출한 후 B는 다시 확인하여 여전히 원래 금액임을 확인합니다. B는 현재 트랜잭션을 종료하고 새 트랜잭션을 시작하여 데이터 변경 사항을 쿼리할 수 있으므로 반복 불가능한 읽기를 방지할 수 있습니다. Seriized(직렬화)를 설정하면 테이블을 잠그는 것과 동일하며 특정 시간에 하나의 트랜잭션만 테이블에 액세스할 수 있습니다.

 반복 읽기는 반복 불가능한 읽기를 방지하지만 팬텀 읽기는 여전히 발생할 수 있습니다.

 예를 들어 싱고의 아내는 은행 부서에 근무하는데, 싱고의 신용카드 사용 내역을 은행 내부 시스템을 통해 자주 확인합니다. 어느 날 그녀는 그 달의 싱고 신용카드 총 소비 금액(월=이번 달의 거래에서 선택 금액)이 80위안인지 확인하고 있었습니다. 이때 싱고는 우연히 밖에서 식사를 하고 요금을 지불하고 있었습니다. 계산대에서 1,000위안, 즉 1,000위안(거래 삽입...)의 새로운 소비 기록이 추가되고 거래가 제출되었습니다. 그러자 신고의 아내는 신고의 해당 월 신용카드 소비 내역을 A4 용지에 인쇄했습니다. 그런데 총 소비량이 1,080위안이라는 걸 알게 됐고, 아내는 환각에 빠진 줄 알고 매우 놀랐고, 이렇게 환상 판독이 이뤄졌다.

 참고: Mysql의 기본 격리 수준은 반복 읽기입니다.


2.4 직렬화 가능(Serialization)
직렬화 가능(Serialization)은 가장 높은 트랜잭션 격리 수준이며 가장 비싸고 성능도 매우 낮습니다. 이 수준에서는 일반적으로 트랜잭션이 순차적으로 실행되는 경우가 거의 없습니다. 더티 읽기(dirty read), 반복 불가능한 읽기, 팬텀 읽기(phantom read)를 피하는 것뿐만 아니라.


3. 요약

3.1 격리 수준 및 해당 가능한 문제 읽기)

불가능불가능
커밋되지 않은 읽기(커밋된 읽기) possible possible possible
读未提交(Read uncommitted) 可能 可能 可能
读已提交(Read committed) 不可能 可能 可能
可重复读(Repeatable read) 不可能 不可能 可能
序列化가능 가능 반복 읽기(반복 읽기)
가능🎜🎜🎜🎜직렬화(직렬화 가능) )🎜 🎜불가능🎜🎜불가능🎜🎜불가능🎜🎜🎜🎜

위 내용은 데이터베이스 트랜잭션 격리 수준과 더티 읽기, 반복 불가능한 읽기 및 팬텀 읽기를 이해하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

LARAVEL 소개 예 LARAVEL 소개 예 Apr 18, 2025 pm 12:45 PM

Laravel은 웹 응용 프로그램을 쉽게 구축하기위한 PHP 프레임 워크입니다. 설치 : Composer를 사용하여 전 세계적으로 Laravel CLI를 설치하고 프로젝트 디렉토리에서 응용 프로그램을 작성하는 등 다양한 기능을 제공합니다. 라우팅 : Routes/Web.php에서 URL과 핸들러 간의 관계를 정의하십시오. 보기 : 리소스/뷰에서보기를 작성하여 응용 프로그램의 인터페이스를 렌더링합니다. 데이터베이스 통합 : MySQL과 같은 데이터베이스와 상자 외 통합을 제공하고 마이그레이션을 사용하여 테이블을 작성하고 수정합니다. 모델 및 컨트롤러 : 모델은 데이터베이스 엔티티를 나타내고 컨트롤러는 HTTP 요청을 처리합니다.

MySQL 및 Phpmyadmin : 핵심 기능 및 기능 MySQL 및 Phpmyadmin : 핵심 기능 및 기능 Apr 22, 2025 am 12:12 AM

MySQL 및 Phpmyadmin은 강력한 데이터베이스 관리 도구입니다. 1) MySQL은 데이터베이스 및 테이블을 작성하고 DML 및 SQL 쿼리를 실행하는 데 사용됩니다. 2) PHPMYADMIN은 데이터베이스 관리, 테이블 구조 관리, 데이터 운영 및 사용자 권한 관리에 직관적 인 인터페이스를 제공합니다.

MySQL 대 기타 프로그래밍 언어 : 비교 MySQL 대 기타 프로그래밍 언어 : 비교 Apr 19, 2025 am 12:22 AM

다른 프로그래밍 언어와 비교할 때 MySQL은 주로 데이터를 저장하고 관리하는 데 사용되는 반면 Python, Java 및 C와 같은 다른 언어는 논리적 처리 및 응용 프로그램 개발에 사용됩니다. MySQL은 데이터 관리 요구에 적합한 고성능, 확장 성 및 크로스 플랫폼 지원으로 유명하며 다른 언어는 데이터 분석, 엔터프라이즈 애플리케이션 및 시스템 프로그래밍과 같은 해당 분야에서 이점이 있습니다.

Laravel 프레임 워크 설치 방법 Laravel 프레임 워크 설치 방법 Apr 18, 2025 pm 12:54 PM

기사 요약 :이 기사는 Laravel 프레임 워크를 쉽게 설치하는 방법에 대한 독자들을 안내하기위한 자세한 단계별 지침을 제공합니다. Laravel은 웹 애플리케이션의 개발 프로세스를 가속화하는 강력한 PHP 프레임 워크입니다. 이 자습서는 시스템 요구 사항에서 데이터베이스 구성 및 라우팅 설정에 이르기까지 설치 프로세스를 다룹니다. 이러한 단계를 수행함으로써 독자들은 라벨 프로젝트를위한 탄탄한 토대를 빠르고 효율적으로 놓을 수 있습니다.

MySQL에서 외국 키의 목적을 설명하십시오. MySQL에서 외국 키의 목적을 설명하십시오. Apr 25, 2025 am 12:17 AM

MySQL에서 외국 키의 기능은 테이블 간의 관계를 설정하고 데이터의 일관성과 무결성을 보장하는 것입니다. 외국 키는 참조 무결성 검사 및 계단식 작업을 통해 데이터의 효과를 유지합니다. 성능 최적화에주의를 기울이고 사용할 때 일반적인 오류를 피하십시오.

MySQL 및 Mariadb를 비교하고 대조하십시오. MySQL 및 Mariadb를 비교하고 대조하십시오. Apr 26, 2025 am 12:08 AM

MySQL과 Mariadb의 주요 차이점은 성능, 기능 및 라이센스입니다. 1. MySQL은 Oracle에 의해 개발되었으며 Mariadb는 포크입니다. 2. MariaDB는 높은 하중 환경에서 더 나은 성능을 발휘할 수 있습니다. 3. Mariadb는 더 많은 스토리지 엔진과 기능을 제공합니다. 4.MySQL은 듀얼 라이센스를 채택하고 MariaDB는 완전히 오픈 소스입니다. 선택할 때 기존 인프라, 성능 요구 사항, 기능 요구 사항 및 라이센스 비용을 고려해야합니다.

SQL vs. MySQL : 둘 사이의 관계를 명확히합니다 SQL vs. MySQL : 둘 사이의 관계를 명확히합니다 Apr 24, 2025 am 12:02 AM

SQL은 관계형 데이터베이스를 관리하는 표준 언어이며 MySQL은 SQL을 사용하는 데이터베이스 관리 시스템입니다. SQL은 CRUD 작업을 포함한 데이터베이스와 상호 작용하는 방법을 정의하는 반면 MySQL은 SQL 표준을 구현하고 저장 프로 시저 및 트리거와 같은 추가 기능을 제공합니다.

MySQL : 데이터베이스, phpmyadmin : 관리 인터페이스 MySQL : 데이터베이스, phpmyadmin : 관리 인터페이스 Apr 29, 2025 am 12:44 AM

MySQL 및 Phpmyadmin은 다음 단계를 통해 효과적으로 관리 할 수 ​​있습니다. 1. 데이터베이스 작성 및 삭제 : Phpmyadmin을 클릭하여 완료하십시오. 2. 테이블 관리 : 테이블을 만들고 구조를 수정하고 인덱스를 추가 할 수 있습니다. 3. 데이터 작동 : 삽입, 업데이트, 데이터 삭제 및 SQL 쿼리 실행을 지원합니다. 4. 가져 오기 및 내보내기 데이터 : SQL, CSV, XML 및 기타 형식을 지원합니다. 5. 최적화 및 모니터링 : 최적화 가능한 명령을 사용하여 테이블을 최적화하고 쿼리 분석기 및 모니터링 도구를 사용하여 성능 문제를 해결하십시오.

See all articles