MySQL의 트랜잭션 격리 수준의 액션 피겨 데모

거래의 기본 요소 (ACID)

원 자성 (자성)

  • 트랜잭션이 모든 작업을 시작하거나 모두가하지 않는 일, 또는 결국, 중간 부분에 부착 할 수 없습니다. 오류가 트랜잭션의 실행 중에 발생한 트랜잭션이 시작되기 전에 다시 상태로 출시 될 예정 모든 작업은 결코 일어나지 않았다 좋아합니다. 그 거래는, 지금까지 원자 고등학교 화학처럼 불가분 전체 인 물질의 기본 단위입니다.

일관성 (일관성)

  • 시작하기 전에 트랜잭션의 종료 후, 데이터베이스의 무결성 제약이 손상되지 않습니다. 예를 들어, B에 대한 전송은, A가 차감 돈이 될 수 없다, B는받지 못했습니다.

절연 (절연)

  • 동시에, 다른 트랜잭션들 사이에서 서로 간섭하지 않고 같은 데이터에 대해 하나 개의 트랜잭션 요청. 예를 들어, A는 B가 카드에 송금 할 수없는, 은행 카드에서 돈을 인출하는 과정 A의 끝나기 전에 돈을 인출하는 것입니다.

영구 (내구성)

  • 트랜잭션이 완료되면, 데이터베이스에 대한 모든 업데이트가 데이터베이스에 저장됩니다 트랜잭션이 롤백 할 수 없습니다.

동시 거래

더러운 읽기

  • 거래 트랜잭션 B가 데이터 업데이트 및 롤백 B를 읽고, A는 데이터를 읽을 더티 데이터입니다

비 반복 읽기

  • 트랜잭션 A가 여러 번 트랜잭션 A를 결과, 데이터가 여러 번 업데이트하고 제출 된 읽기 트랜잭션 A는 트랜잭션 B의 과정에서, 여러 번 같은 데이터를 읽어 동일한 데이터를 읽고, 그 결과는 일치하지 않습니다.

매직 읽기

  • 데이터베이스 시스템 관리자는 변경 등급 ABCDE에서 모든 학생들을위한 특정 점수가 발생합니다,하지만 시스템 관리자가 A 레코드를 변경하는 경우 시스템 관리자 B는이 있음을 발견 끝나지 않는다,이 시간에 기록 된 특정 점수를 삽입합니다 환각으로 일어난처럼 하룻밤 변경이 팬텀 읽기라고합니다.

요약 : 비 반복 읽기 및 팬텀 쉽게 혼동 읽기, 반복 불가능한 읽기가 수정에 초점을 맞추고, 팬텀 추가 또는 삭제에 초점을 읽습니다. 단지 라인의 조건을 충족하는 잠금 비 반복 읽기의 문제를 해결, 필요성은 팬텀 읽기 잠금 테이블을 해결하기 위해

MySQL의 트랜잭션 격리 수준

트랜잭션 격리 수준 더러운 읽기 비 반복 읽기 매직 읽기
확약 읽기 (읽기 커밋되지 않은) 그것은이다 그것은이다 그것은이다
최선을 다하고 읽기 (읽기 커밋) 아니오 그것은이다 그것은이다
반복 읽기 (반복-읽기) 아니오 아니오 그것은이다
직렬화 (직렬화) 아니오 아니오 아니오
  • MySQL은 반복 읽기입니다
  • 의 MyISAM은 비 반복 읽기입니다

격리 수준

현재 격리 수준보기

mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set, 1 warning (0.00 sec)

격리 수준 변경

mysql> set session transaction isolation level read uncommitted;
Query OK, 0 rows affected (0.00 sec)

mysql> select @@tx_isolation;
+------------------+
| @@tx_isolation   |
+------------------+
| READ-UNCOMMITTED |
+------------------+
1 row in set, 1 warning (0.00 sec)

확약 읽기 (읽기 커밋되지 않은) 테스트

  1. 두 클라이언트는 격리 수준을 수정
  2. (코우) 트랜잭션 개시 1, 3 (2)에
  3. 이 시간 kou1 지르지 만, 그가 발견 된 코우 데이터를 수정
  4. 이 시간 롤백 후 코우가 발견 kou1는 잘못된 데이터 인 경우

비 반복 읽기 (읽기 최선을 다하고 있습니다)

  • kou1 오픈 코우 업무
  • kou1는 코우 변경 및 커밋 된 트랜잭션되는 읽기되었다. 그런 다음 kou1 읽기 (kou1가 문제이며, 지르지 않은) 트랜잭션은 새로운 데이터에 참석, 트랜잭션에있는 두 개의 결과를 읽어 보시기 바랍니다. 그것은 비 반복 읽기 현상을 일으켰다.

그 수준은 읽기 확약보다 높다

  • 더러운 읽기의 문제를 해결
    그림 삽입 설명 여기
  • kou1 트랜잭션이 끝나지 않았습니다 만, 코우 제출, kou1는 두 개의 다른 데이터에서 발견
    그림 삽입 설명 여기

반복 읽기

  • 코우 업무
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from book;
+----+-----------+-----------+
| id | name      | author    |
+----+-----------+-----------+
|  1 | 红楼梦    | 曹雪芹    |
|  2 | 2         | 2         |
|  3 | 3         | 3         |
+----+-----------+-----------+
3 rows in set (0.00 sec)

mysql> insert into book values(4,4,4);
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.01 sec)

  • kou1 업무
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from book;
+----+-----------+-----------+
| id | name      | author    |
+----+-----------+-----------+
|  1 | 红楼梦    | 曹雪芹    |
|  2 | 2         | 2         |
|  3 | 3         | 3         |
+----+-----------+-----------+
3 rows in set (0.00 sec)

mysql> insert into book values(4,4,4);
ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'
mysql> select * from book;
+----+-----------+-----------+
| id | name      | author    |
+----+-----------+-----------+
|  1 | 红楼梦    | 曹雪芹    |
|  2 | 2         | 2         |
|  3 | 3         | 3         |
+----+-----------+-----------+
3 rows in set (0.00 sec)
  • 4 삽입 이번에는 삽입 할 수 없지만, 쇼 아무것도 보이지 않았다. 이 팬텀 읽기입니다

  • 당신은 새로운 데이터에 대한 정보를 읽고 싶어, 당신은 새로운 데이터 쿼리 이후에 추가 될 수있다 읽으려면, 새로운 작품을 읽지 않은 경우 업데이트에 대한 데이터가 최신 버전에서 발견 할 수 있도록, 기록 동작 또는 커밋.

게시 된 257 개 원래 기사 · 원 찬양 223 · 전망 320 000 +

추천

출처blog.csdn.net/csdn_kou/article/details/103121132