MySQL 트랜잭션 검토

MySQL 트랜잭션 검토

1.1 거래 개요

  • 트랜잭션 (트랜잭션), 트랜잭션은 완전한 비즈니스 논리 단위이며 나눌 수 없으며,

예 : 은행 계좌 이체, 계좌 A에서 계좌 B로 이체, 두 개의 갱신 명세서를 실행해야합니다.

업데이트가 증가하고

업데이트가 줄어들고

위의 두 업데이트와 문장은 동시에 성공하고 실패합니다.

하나의 성공과 하나의 실패를 허용하는 것이 낫습니다.

위의 두 DML 문이 동시에 성공하고 실패하는지 확인하려면 데이터베이스 "트랜잭션 메커니즘"을 사용해야합니다.

  • 트랜잭션과 관련된 문은 DML 언어, 데이터베이스 조작 문, (삭제 업데이트 삽입)입니다.

그 이유는 이러한 문장이 데이터베이스의 "데이터"와 관련되어 있기 때문에

트랜잭션의 존재는 데이터의 무결성과 보안을 보장하는 것입니다.

  • 모든 비즈니스에 DML 언어 만 필요한 경우에도 트랜잭션 메커니즘이 필요합니까?

업무가 필요 없습니다.

그러나 실제 상황은 이와 같지 않습니다. 일반적으로 거래, "비즈니스"는 공동으로 완료하기 위해 여러 DML 언어가 필요합니다.

1.2 거래의 원리

mysql 다섯 가지 주요 진술

  1. DQL 데이터베이스 쿼리 문

  2. DML 데이터베이스 조작 문

  3. DDL 데이터베이스 정의 언어

  4. TCL (트랜잭션 : 롤백 커밋) 세이브 포인트 저장 점

  5. DCL : (승인)

이미지 20200904084955651

1.3 거래의 특징

트랜잭션 ACID의 4 가지 특징

  1. A. ( 원 자성 ) 원 자성 : 트랜잭션은 가장 작은 단위이며 나눌 수 없습니다.

  2. C ( 일관성 ) 일관성 : 트랜잭션은 여러 DML 문이 동시에 성공하거나 실패하도록해야합니다.

  3. I ( 격리 ) 격리 : 트랜잭션 A는 스레드와 동등한 트랜잭션 B로부터 격리되어야합니다.

  4. D ( 내구성 ) : 내구성 : 내구성은 트랜잭션이 성공한 것으로 간주되기 전에 최종 데이터가 하드 디스크 파일에 유지되어야 함을 의미합니다.

1.4 트랜잭션 격리

트랜잭션 간 격리 정보

트랜잭션 격리를위한 격리 수준이 있으며 이론적으로 다음 네 가지가 포함됩니다.

사실, 그들은 두 번째 기어에서 시작합니다.

  1. 첫 번째 수준 : 커밋되지 않은 읽기 (커밋되지 않은 읽기), 현재 트랜잭션은 상대방의 커밋되지 않은 트랜잭션을 읽을 수 있습니다.

커밋되지 않은 데이터를 읽으면 더티 읽기가 발생합니다 (더티 읽기는 이전 트랜잭션에서 커밋되지 않은 더티 데이터를 읽음). 현상 : 더티 데이터를 읽었 음을 나타냅니다.

  1. 두 번째 수준 : ** Read Committed ** 상대방의 트랜잭션에서 제출 한 데이터를 읽을 수 있습니다.

읽기 커밋의 문제점은 다음과 같습니다. 반복 불가능 읽기 (반복 불가능 읽기는 이전 트랜잭션의 제출 된 데이터를 다시 읽는 것입니다)

  1. 세 번째 수준 : 반복 가능한 읽기 (반복 가능한 읽기)

이 격리 수준은 다음을 해결합니다. 반복 불가능한 읽기

문제가 있습니다. 읽은 데이터가 가상입니다.

팬텀 읽기 (가상 읽기)는 한 트랜잭션에서 다른 트랜잭션에 의해 삽입 된 데이터를 읽는 것을 의미하며 이로 인해 전후 읽기가 일관되지 않습니다.

  1. 네 번째 수준 (직렬화 가능) : 직렬화, 직렬화 된 판독은 모든 문제를 해결합니다.

단점 : 낮은 효율성, 트랜잭션 대기열 필요

Oracle은 기본적으로 두 번째 기어로 시작하며 읽기가 제출되었습니다.

MySQL 기본 격리 수준, 반복 가능한 읽기

1.5 데모 사업

Mysql 트랜잭션은 기본적으로 자동 제출됩니다. (자동 제출이란 DML 문이 실행되는 한 한 번만 제출됩니다)

먼저 격리 트랜잭션 수준을 설정합니다.

1. 커밋되지 않은 읽기 (커밋되지 않은 읽기)

커밋되지 않은 읽기

두 개의 창을 열고 한 트랜잭션의 데이터를 수정하고 한 트랜잭션을 쿼리 할 수 ​​있습니다.

트랜잭션의 격리 수준 설정

커밋되지 않은 읽기 전역 트랜잭션 격리 수준을 설정합니다.

msyql 격리 수준보기;

@@ global.tx_isolation을 선택하십시오.

이미지 20200904085613662

격리 수준을 설정 한 후 나가십시오.

이미지 20200904085632680

2. 커밋 된 읽기 (커밋 된 읽기)

다른 트랜잭션에서 제출 한 데이터를 읽을 수 있습니다 (대부분의 데이터베이스의 기본 격리 수준).
이미지 20200904085706504

3. 반복 읽기 (반복 읽기)

MySQL 기본 격리 수준

이미지 20200904085811828

현재 대화의 격리 수준을 반복 읽기로 설정하면 현재 대화를 반복적으로 읽을 수 있습니다. 즉 각 읽기의 결과 집합이 동일합니다. 실제로 데이터의 복사본이 백업되고 팬텀 읽기 현상이 발생합니다.

4. 직렬화 가능

이미지 20200904085843238

추천

출처blog.csdn.net/qq_41076577/article/details/108402005