MYSQL 데이터베이스 트랜잭션의 재이해

黄舟
풀어 주다: 2017-02-28 13:39:43
원래의
1412명이 탐색했습니다.

트랜잭션의 개념: 단일 논리적 작업 단위에 의해 완전히 또는 전혀 수행되지 않는 일련의 작업입니다. 간단히 이해하자면 모든 데이터 작업은 트랜잭션의 논리적 작업 단위에서 수행된다는 것입니다.

트랜잭션의 4가지 속성: ACID.

A: 원자성, 원자성. 원자성은 불가분성을 강조하고 데이터베이스를 실행하는 과정을 개체 개체로 추상화합니다. 그러면 이 개체가 실행되면 전체 프로세스가 완료되거나 실행되지 않습니다.

이 장점은 데이터의 무결성과 정확성을 보장합니다. 가장 실제적인 예는 이체 과정에서 동일한 은행 카드가 갑자기 파손되어 거래가 완료되지 않고 롤백되는 것입니다. 마지막으로 카드 잔액이 줄어들지 않도록 데이터가 원래 상태인지 확인하십시오.

C: 일관성이 있습니다. 일관성과 원자성에 대한 이해는 기본적으로 동일하며 둘 다 데이터의 무결성을 보장하기 위한 것입니다. 예를 들어 트랜잭션은 추가, 삭제, 수정, 쿼리의 네 가지 작업이 모두 실행되는 경우에만 구성됩니다. 성공적으로 유지될 수 있습니까? 상태는 작업 실행이 실패하는 한 실패 상태이므로 상태의 통일성을 보장합니다.

I: 단열, 절연. 동시 트랜잭션에 대한 격리가 존재합니다. 모든 트랜잭션은 서로 격리되어 있으며 서로 영향을 주지 않습니다. 높은 격리의 경우 트랜잭션이 다른 트랜잭션에 액세스할 때 트랜잭션이 실행되기 전의 상태에 액세스하거나 첫 번째 트랜잭션이 실행된 후의 상태에 액세스하지 않지만 이로 인해 발생합니다. 데이터 동시성을 낮추려면 데이터베이스를 설계할 때 모든 트랜잭션을 실제 요구 사항에 따라 평가해야 합니다.

트랜잭션 격리는 얕은 것부터 깊은 것까지 나눌 수 있습니다. READ UNCOMMITTED(커밋되지 않은 읽기)---READ COMMITTED(커밋된 읽기)---REPEATABLE READ(반복 읽기)- - -SERIALIZABLE(직렬화)

(1) SERIALIZABLE(직렬화)

범위 잠금 추가(예: 테이블 잠금, 페이지 잠금 등) , 트랜잭션 A가 종료될 때까지 범위 잠금에 대한 심층적인 연구를 수행하지 않았습니다. 이렇게 하면 다른 트랜잭션 B가 이 범위 내에서 삽입, 업데이트 및 기타 작업을 수행할 수 없습니다.
팬텀 읽기, 더티 읽기, 반복 불가능 읽기 등의 문제는 발생하지 않습니다.

(2) REPEATABLE READ(반복 읽기)

레코드를 읽어오려면 공유 잠금을 끝까지 추가합니다. 거래 A . 이 레코드를 수정하려는 다른 트랜잭션 B의 시도는 트랜잭션 A가 끝날 때까지 기다립니다.

가능한 문제: 범위 쿼리를 실행할 때 가상 읽기가 발생할 수 있습니다.

(3) READ COMMITTED(커밋 읽기)

트랜잭션 A에서 데이터를 읽을 때 레코드에 공유 잠금을 추가하지만 읽기 끝은 즉시 공개됩니다. 이 레코드를 수정하려는 트랜잭션 B의 다른 시도는 전체 트랜잭션 A가 끝나지 않고 A의 읽기 프로세스가 끝날 때까지 대기합니다. 따라서 트랜잭션 A의 서로 다른 단계에서 동일한 레코드의 읽기 결과가 다를 수 있습니다. ,

가능한 문제: 반복해서 읽을 수 없습니다.

(4) READ UNCOMMITTED(커밋되지 않은 읽기)

공유 잠금이 추가되지 않습니다. 따라서 다른 트랜잭션 B는 트랜잭션 A를 읽는 과정에서 동일한 레코드를 수정할 수 있으며, 이로 인해 A가 읽은 데이터가 손상되거나 불완전하거나 잘못된 데이터가 발생할 수 있습니다.

또한 트랜잭션 B에서 수정된(커밋되지 않은) 데이터는 트랜잭션 A에서 읽을 수 있습니다. 예를 들어, 트랜잭션 B가 R 레코드를 수정했지만 제출되지 않았습니다. 이때 Transaction A에서 R 레코드를 읽으면 B가 수정한 데이터를 읽게 된다. ~                                     

D: 지속성, 지속성. 트랜잭션 실행이 완료된 후에는 시스템이 치명적으로 실패하더라도 데이터에 대한 영향은 지속됩니다.

위 내용은 MYSQL 데이터베이스 트랜잭션에 대한 재이해입니다. 자세한 내용은 PHP 중국어 홈페이지(www.php)를 참고하시기 바랍니다. .cn)!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿