>데이터 베이스 >MySQL 튜토리얼 >MySQL 트랜잭션 정보

MySQL 트랜잭션 정보

一个新手
一个新手원래의
2017-10-13 10:30:141389검색

1》트랜잭션이란 무엇을 말하는 걸까요?个 업무는 비즈니스 로직 처리 단위로 간주될 수 있습니다.
2 "ACID 원칙:
(1) 원자성
(2) 일관성 블록, 2000 빠른 B 계정,
-A- 500-"B
A 계정과 B 계정의 합 5000 fast
실행 전과 실행 전, 이 상태의 합이 일관되어야 합니다.性(3) Isolation(격리)
A 계정 3000-- "500-& gt; B 계정 2500
업데이트(1) 이체
SELECT SUN() A B Together
(4) Slayer(4) Slayer(4) Slayer (4) Slayer (4) 최고의 내구성
지속성 보장:
1 & gt; 거래가 전달되기 전:
출금하려는 경우 거래 전 디스크에 데이터를 쓰시겠습니까? 디스크에서 데이터를 리콜합니까? 아주 느린가요? 매우 고통스럽나요? 무엇을 해야 할까요? ; 2 & gt; 트랜잭션을 결합하여

디스크에도 디스크가 있습니다. 데이터 파일과의 차이점은 무엇인가요?
              차이점: 트랜잭션 로그는 순차 I/O를 생성하는 반면 디스크 데이터 파일은 임의 I/O를 생성합니다. 트랜잭션 로그의 각 작업은 디스크의 연속 저장 블록에 순차적으로 기록되지만 데이터 파일은 이와 다릅니다. .志 (1) 로그: 순차 IO
(2) 데이터 파일: 무작위 IO
트랜잭션 로그에 트랜잭션을 기록합니다. 잠시 후 사물의 배경 또는 관련 프로세스가 데이터 파일에 다시 기록됩니다. 사물이 작동하는 데이터의 내구성.

3》트랜잭션의 상태입니다.
​ ​ (1) 활성 트랜잭션이거나
​ ​ ​ 트랜잭션이 실행 중입니다.

​ ​ (2) 부분적으로 커밋된 트랜잭션

​ ​ ​우리는 트랜잭션이 실행되거나 실행되지 않는데 부분 제출이란 무엇입니까?
            즉, 트랜잭션이 실행되어 일부는 디스크에 기록되고 다른 일부는 실행 중이며 마지막 실행 문이 작성되는 중입니다
        (3) 실패한 트랜잭션
              트랜잭션이 정상적으로 제출되었지만 실패했습니다. 목표를 달성하기 위해 실패한 (4) 트랜잭션 일시 중단이라고 하는 트랜잭션을 제출하지 않거나 절반이 미리 끝나는 것을 일시 중단이라고 합니다. 事 (5) 제출된 거래
보건소에서 제출한 업무는 반드시 위 5가지 상태 중 어느 하나에 해당해야 하며, 한번 제출된 거래는 취소할 수 없습니다.

4》트랜잭션 동시성 및 예약
   트랜잭션 동시성:
    1>처리량 및 리소스 활용도 향상
       2>대기 시간 단축
                                                my in me in in in , 격리하려면 트랜잭션이 필요합니다. 격리하면 어떻게 되나요? 이는 트랜잭션 스케줄링에 따라 달라집니다. 모든 데이터베이스 시스템 자체에는 트랜잭션 스케줄링이 매우 복잡합니다. 스케줄링 방법은 스케줄링을 완료하기 위해 일반적으로 트랜잭션 스케줄링을 사용해야 합니다. 완료되면 두 가지 일반적인 일정 전략이 있습니다.

업무 스케줄링: & 1 & gt; 복구 스케줄링
일반적으로 두 트랜잭션이 서로 스케줄될 때 두 트랜잭션의 교차 실행으로 인해 다른 트랜잭션의 상태가 변경되지 않습니다. 동기화할 복원 가능한 스케줄링을 사용하면 롤링 시 영향을 받게 되므로 롤백 중 영향을 피하기 위해 계단식 없는 스케줄링을 구현할 수도 있습니다.

5》트랜잭션 격리
우리는 트랜잭션 스케줄링에 대해 알고 있습니다. 트랜잭션에는 여러 작업이 포함될 수 있습니다. 트랜잭션 스케줄링의 존재는 이러한 교차 실행으로 인해 주문을 더 잘 예약하는 것입니다. 서로에게 너무 많은 영향을 미칩니다. 트랜잭션 간의 영향을 더욱 줄이기 위해 트랜잭션에는 4가지 격리 수준이 있습니다. 네 개는요? ; 1 & gt; 격리 수준에서 uncommitted 읽기
를 읽습니다. 모든 트랜잭션은 준비되지 않은 다른 트랜잭션의 실행 결과를 볼 수 있습니다. 이 격리 수준은 다른 수준보다 성능이 별로 좋지 않기 때문에 거의 사용되지 않습니다. 데이터는 또한 다음과 같습니다: DIRTY Read

2 & gt; 대부분의 데이터베이스의 기본 격리 수준을 읽습니다(그러나 mysql 기본 수준은 이것이 아닙니다). 이는 단순 격리 수준을 충족합니다. 정의: 트랜잭션은 다음에 의해 수행된 변경 사항만 볼 수 있습니다. 커밋된 트랜잭션 3>반복 읽기 반복 읽기

이는 동일한 트랜잭션의 여러 인스턴스가 동시에 데이터를 읽도록 보장하는 Mysql의 기본 트랜잭션 격리 수준이지만 이론적으로는 다른 결과로 이어집니다. 문제: 팬텀 읽기(Phantom read) 간단히 말해서, 팬텀 읽기는 사용자가 특정 범위의 데이터 행을 읽을 때 해당 범위에 다른 트랜잭션이 삽입되는 것을 의미합니다. 그는 새로운 "유령 행"을 발견할 것입니다. Innodb와 Falcon 엔진은 MVCC(다중 버전 동시성 제어) 메커니즘을 통해 이 문제를 해결합니다. +                                                          직렬화 가능
       이는 단계가 서로 충돌할 수 있도록 트랜잭션 순서를 강제하여 팬텀 읽기 문제를 해결합니다. 공유 잠금이 설치됩니다. 이 수준에서는 다음과 같은 결과가 발생할 수 있습니다. 일반적으로 동시성 제어가 격리 수준을 달성하려면 동시성 제어 및 동시성 제어를 기반으로 이를 구현해야 함을 의미합니다. >                                                                                        녹음합니다. ) 다중 버전 및 스냅샷 격리

                추가 확장:
                                                                 잠금을 얻지 못하며 결과는 다음과 같습니다.
잠금 기아. 게다가 교착상태라는 또 다른 종류의 잠금 장치도 있습니다

6》트랜잭션 시작 및 롤백

일반적으로 트랜잭션 시작 작업은 다음과 같습니다.
​ ​​ 1>Start transaction
​ ​ ​ ​         
     3> ;트랜잭션 커밋
           
            
                
       1>거래 시작
                                                                                                        거래를 시작하시겠습니까? 거래 롤백. 추측했다. C 롤백;
4 & gt; 보기 확인, 4가 반환되었나요?
                                                        학생에서 *를 선택하세요. ; 1 & gt; 거래 시작
2 & gt; 학생 테이블 중 하나에서 정보 삭제
num = '4'
3 & gt; 데이터를 다시 복원할 수 있나요? +                                     학생에게서 *를 선택하세요. 이때 75번째 항목이 잘못 실행된 것을 발견했습니다. 이제 어떻게 해야 할까요? 세이브포인트의 역할이 나옵니다. 예: 10개의 작업마다 저장합니다. ​ ​
​ ​ ​---->10 (저장 포인트 1 만들기)------>20 (저장 포인트 2)

​ ​ ​ 1> 거래 시작

​ ​​​​ 거래 시작;

2 & gt; Student 테이블 중 하나에서 "Cuihua" 정보 삭제
학생 WHERE NAME = 'CUIHUA'에서 삭제
거래 포인트 저장
포인트 저장 yya
3 & gt; 학생 테이블 중 하나에서 "Simon Blood" 정보 삭제
이름 = 'Ximenchuiniu'에서 삭제
저장점 yyb
4 & gt; 하나의 학생 테이블에서 "Niu Er" 정보 삭제 " tyb & 5 & gt; 좋아, 회복 시작
Ximen Chuixue
     yya로 롤백하고 싶다면 생각해 보세요 여러분. 세이브포인트가 뭔가요? ​ ​
​ ​ 6>복원 성공 여부 확인
​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 6>복구 성공 여부 확인 ​ ​ ​ ​ ​ ​​ ​            학생 중에서 *를 선택하세요.自动 6.3 트랜잭션 자동 제출

1 & gt; mysql 트랜잭션 자동 제출
select @@ AutoCommit;
mysql & gt; select @@ AutoCommit                                                                                          +------------+
2 & gt; mysql 자동 제출 수정
setauthorocommit = 0;

3 & gt; 상태 이름에서 삭제 = 'ximenchuniu'
그리고 우리가 명시적으로 거래를 시작하지 않았나요? 트랜잭션은 DML 문 롤백을 지원합니다. DDL은 숨겨진 테스트 커밋이므로 지원되지 않습니다.交 읽기 확인:
select @@ tx_isolation 쿼리 작업:
              1.select @@tx_isolation;
              2.set tx_isolation='read_uncommittd ';

       Window 1 작업:
              1. 거래 시작 교차 거래 시작
2. update Student set age='70' where d_id=' 1010 '; 口 창 2 작업
1. 교차 거래 시작
2. Student에서 *를 선택하면 1 창이 70으로 변경된 것을 볼 수 있습니다. , 그리고 창 트랜잭션이 제출되지 않습니다. 验 확인 읽기 및 제출
하나의 MySQL, 두 개의 창을 열고 두 당사자가 트랜잭션 창 1과 창 2를 교차 시작합니다. 일반적인 작업:

1. @@ tx_isolation; 2.Set tx_isolation = 'read_committd';

: Window 1 작업: 口 1. 교차 트랜잭션 시작
2. Student Set Age = '70 '여기서 d_id =' 1010 '; 제출된 데이터를 다시 볼 수 있나요

                                                                                                                                                                       거래 시작
              학생에게서 *를 선택합니다. 업데이트된 데이터는 창 A에서 3단계 제출을 수행한 후에만 볼 수 있습니다. 더러운 독서를 피하십시오

확인은 읽을 수 있습니다. 个 하나의 MySQL, 두 개의 창을 열고 양쪽에서 트랜잭션을 시작합니다. 팬텀 읽기라고 다르게

            창 1과 창 2의 일반적인 작업:                         1.select @@tx_isolation;
                                             ‐             2.set tx_isolation= '반복 가능-읽기';

 창 1 작업
1. 교차 트랜잭션 시작
            2. update Student set age='60' where num='10';
            3. 교차 트랜잭션 시작
         2 .select * from Student; 아직 1번 창에서 업데이트된 데이터를 확인하세요. 3. 1번 창에서 업데이트된 데이터를 확인한 후 1Commit을 선택하세요. 4.1번 창을 볼 수 있습니다. .
하나의 MySQL, 두 개의 창을 열고 두 당사자가 트랜잭션
창 1 및 창 2 공통 작업을 교차합니다.
1. @@ tx_isola 선택 .start 트랜잭션 시작
          2. 학생 세트 연령= '60' 여기서 num='10';은 Window 2가 작업을 제출한 후에만 실행할 수 있습니다.
창 2 작업 1.Start Transaction; 교차 트랜잭션 시작
2.Commit이 제출되면 1 창의 업데이트가 성공적으로 실행될 수 있습니다. 이것은 직렬화 가능합니다!个 이유: 事 동일한 데이터를 동시에 수정하기 위해 두 번의 거래가 이루어지며, 한쪽이 먼저 제출해야 합니다. 그렇지 않으면 읽기와 쓰기가 서로 차단됩니다.

위 내용은 MySQL 트랜잭션 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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