4가지 트랜잭션 격리 수준이 있습니다. 1. 커밋되지 않은 읽기(커밋되지 않은 읽기) - 더티 읽기, 반복 불가능한 읽기 및 팬텀 읽기를 유발할 수 있는 커밋되지 않은 데이터 변경 사항을 읽을 수 있습니다. 2. 커밋된 읽기(Read Committed)는 동시 트랜잭션에 의해 제출된 데이터 읽기를 허용하므로 더티 읽기를 방지할 수 있지만 반복 불가능하고 팬텀 읽기가 발생할 수 있습니다. 3. 반복 읽기(반복 읽기), 동일한 필드를 여러 번 읽으면 결과가 일관됩니다. 4. 직렬화 가능(직렬화 가능).
이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.
1. 거래란 무엇인가요?
트랜잭션은 논리적 작업 집합으로, 모두 실행되거나 아무것도 실행되지 않습니다.
가장 고전적이고 자주 언급되는 거래의 예는 은행 송금입니다. 예를 들어, Xiao Ming이 Xiao Hong에게 1,000위안을 이체하려는 경우 이 이체에는 Xiao Ming의 잔액을 1,000위안 줄이고 Xiao Hong의 잔액을 1,000위안 줄이는 두 가지 주요 작업이 포함됩니다. 이 두 작업 사이에 갑자기 오류가 발생하여 Xiao Ming의 잔액이 감소하고 Xiao Hong의 잔액이 증가하지 않는 경우, 이러한 상황은 절대 허용되지 않습니다. 트랜잭션은 이 두 가지 주요 작업이 성공하거나 둘 다 성공하지 못하도록 보장하는 것입니다.
2. 트랜잭션 특성(ACID)
- **원자성: **트랜잭션의 최소 실행 단위, 분할은 허용되지 않습니다. 트랜잭션의 원자성은 작업이 모두 실행되거나 전혀 실행되지 않도록 보장합니다.
- **일관성:**트랜잭션 실행 전후에 데이터가 일관되게 유지됩니다. 예를 들어, 자금 이체 사업에서는 거래의 성공 여부에 관계없이 송금인과 수취인 간의 총액이 변경되지 않고 유지되어야 합니다.
- ** 격리: ** 데이터베이스에 동시에 액세스할 때 사용자의 트랜잭션은 다른 트랜잭션의 영향을 받아서는 안 되며, 데이터베이스는 동시 트랜잭션 간에 독립적입니다.
- **지속성:**트랜잭션이 커밋된 후 데이터베이스의 데이터 변경 사항은 내구성이 있으므로 데이터베이스가 실패하더라도 영향을 받아서는 안 됩니다.
3. 동시 트랜잭션으로 인한 문제
일반적인 애플리케이션에서는 여러 트랜잭션이 동시에 실행되고 동일한 데이터에서 작동하여 해당 작업을 완료하는 경우가 많습니다(여러 사용자가 동일한 데이터에서 작동). 동시성이 필요하지만 다음과 같은 문제가 발생할 수 있습니다.
- **더티 읽기: **트랜잭션이 데이터에 액세스하여 수정하고 있지만 아직 트랜잭션을 제출하지 않은 경우 다른 트랜잭션도 이 데이터에 액세스한 후 사용했습니다. 이 데이터의 수정 사항이 데이터베이스에 제출되지 않았기 때문에 다른 트랜잭션에서 읽은 데이터는 "더티 데이터"입니다. 이 동작은 "더티 데이터"에 기반한 작업입니다. "라는 문제가 발생할 수 있습니다.
수정 손실: - 한 트랜잭션이 하나의 데이터를 읽을 때 다른 데이터도 해당 데이터에 액세스한 다음 첫 번째 트랜잭션이 데이터를 수정한 후 두 번째 트랜잭션도 이 데이터를 수정한다는 의미입니다. 이런 식으로 첫 번째 트랜잭션의 수정 결과가 손실되는 상황을 수정 손실이라고 합니다. 예: 트랜잭션 1은 테이블의 데이터를 읽지만 트랜잭션 1의 수정 기록은 손실됩니다.
A=20
,事务2也读取A=20
,事务1修改A=A-1
,事务2也修改A=A-1
,最终结果都是19
반복 불가능한 읽기: 트랜잭션이 종료되기 전에 다른 트랜잭션도 해당 데이터에 액세스하여 데이터를 수정하는 경우 첫 번째 트랜잭션에서 두 번 읽은 데이터가 일치하지 않는 것을 말합니다. 이러한 상황을 반복 불가능 읽기라고 합니다. -
팬텀 읽기: 팬텀 읽기는 반복 불가능한 읽기와 유사합니다. 팬텀 읽기는 트랜잭션이 여러 행의 데이터를 읽는 것을 의미합니다. 트랜잭션이 아직 종료되지 않은 후 다른 트랜잭션이 일부 데이터를 삽입한 다음 다른 트랜잭션이 삽입됩니다. 쿼리에서 첫 번째 트랜잭션은 마치 환각이 발생한 것처럼 원래 읽은 것보다 더 많은 데이터를 읽게 되므로 이를
유령 읽기- 라고 합니다.
비반복 읽기와 환상 읽기의 차이점:
비반복 읽기의 초점은 수정에 중점을 두는 반면 환상 읽기의 초점은 추가 또는 삭제에 있습니다. 밤 1 (동일한 조건, 다시 읽으면 읽는 데이터가 달라짐): 거래 1의 A씨는 급여가 1,000이라고 읽었으며 거래 2의 B씨는 I입니다. A씨의 급여를 2000으로 수정했습니다. A씨가 급여를 다시 읽으면 2000이 됩니다. 이는 반복할 수 없는 읽기입니다.
밤나무 2(동일 조건, 첫 번째와 두 번째로 읽는 레코드 수가 다름): 급여 테이블에 급여가 3,000보다 큰 사람이 4명이 있는 경우 트랜잭션 1은 급여가 더 큰 레코드를 모두 읽습니다. 3,000개 이상 총 4개의 레코드가 조회되었으며, Transaction 2에서 급여가 3,000이 넘는 다른 레코드를 조회하였고, Transaction 1이 조회된 레코드를 다시 읽어보니 조회된 레코드의 개수는 5개였습니다. 이는 팬텀 읽기입니다.
4. 트랜잭션 격리 수준
SQL 표준은 4가지 격리 수준을 정의합니다.
- **READ-UNCOMMITTED:**아직 커밋되지 않은 읽기를 허용하는 가장 낮은 격리 수준입니다. 더티 읽기(dirty read), 반복 불가능한 읽기, 팬텀 읽기(phantom read)가 있습니다.
** READ-COMMITTED: ** 동시 트랜잭션으로 제출된 데이터 읽기를 허용합니다. - 더티 읽기를 방지할 수 있지만 반복 불가능하고 팬텀 읽기가 발생할 수 있습니다.
**반복 읽기(REPEATABLE-READ): **트랜잭션 자체가 수정되지 않는 한 동일한 필드에 대한 여러 읽기의 결과는 일관됩니다. - 더티 읽기 및 반복 불가능 읽기는 피할 수 있지만 팬텀 읽기가 발생할 수 있습니다. .
** 직렬화 가능: ** ACID 격리 수준을 완전히 준수하는 가장 높은 격리 수준, 모든 트랜잭션이 순서대로 실행됩니다. - 더티 읽기, 반복 불가능 읽기 및 팬텀 읽기를 방지할 수 있습니다.
위 내용은 mysql 트랜잭션 격리 수준은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!