> 데이터 베이스 > MySQL 튜토리얼 > MySQL 트랜잭션 관련 지식 상세 소개(코드 예시)

MySQL 트랜잭션 관련 지식 상세 소개(코드 예시)

不言
풀어 주다: 2019-02-01 10:41:18
앞으로
2759명이 탐색했습니다.

이 기사의 내용은 MySQL 트랜잭션 관련 지식에 대한 자세한 소개(코드 예제)입니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

MySQL 트랜잭션 및 트랜잭션 격리 수준

MySQL 트랜잭션은 주로 대규모 작업과 복잡성이 높은 데이터를 처리하는 데 사용됩니다. 예를 들어 인사관리시스템에서 사람을 삭제하면 그 사람의 기본정보도 함께 삭제되며, 우편함, 물품 등 그 사람과 관련된 정보도 함께 삭제된다. 이러한 데이터베이스 운영문은 거래를 구성한다. (추천 과정: MySQL 튜토리얼)

    • MySQL에서는 Innodb 데이터베이스 엔진을 사용하는 데이터베이스나 테이블만 트랜잭션을 지원합니다

    • 트랜잭션 처리를 사용하여 데이터베이스의 무결성을 유지하고 SQL 배치를 보장할 수 있습니다. 명령문은 모두 실행되거나 모두 실행되지 않습니다

    • 트랜잭션은 명령문 삽입, 업데이트, 삭제를 관리하는 데 사용됩니다

  • 일반적으로 트랜잭션은 원자성, 일관성, 격리성, 내구성이라는 4가지 조건을 충족해야 합니다.

    • 원자성:
    • 트랜잭션의 모든 작업은 모두 실행되거나 아무것도 실행되지 않으며 중간에서 끝나지 않습니다. 트랜잭션 실행 중 오류가 발생하면 트랜잭션 시작 전 상태로 롤백됩니다.

    • 일관성:
    • 트랜잭션 시작 전과 트랜잭션 종료 후에도 데이터베이스의 무결성이 파괴되지 않습니다. 이는 기록된 데이터가 데이터의 정확성 및 연결을 포함하여 미리 설정된 모든 규칙을 완전히 준수해야 하며 후속 데이터베이스가 예약된 작업을 자발적으로 완료할 수 있음을 의미합니다

    • 격리:
    • 데이터베이스는 동시에 여러 동시 트랜잭션을 허용합니다. 시간 데이터를 읽고, 쓰고, 수정하는 기능, 격리를 통해 여러 트랜잭션이 동시에 실행될 때 교차 실행으로 인한 데이터 불일치를 방지할 수 있습니다. 트랜잭션 격리는 커밋되지 않은 콘텐츠 읽기, 커밋된 콘텐츠 읽기, 반복 가능한 읽기 및 직렬화를 포함하여 다양한 수준으로 구분됩니다.

    • 지속성:
    • 트랜잭션이 종료된 후 시스템 오류가 손실되지 않더라도 데이터 수정은 영구적입니다.

    MySQL 명령줄의 기본 설정에서는 트랜잭션이 자동으로 제출됩니다. 즉, SQL 문을 실행한 후 즉시 COMMIT 작업이 실행됩니다. 따라서 트랜잭션을 명시적으로 시작하려면 BEGIN 또는 START TRANSACTION 명령을 사용하거나 SET AUTOCOMMIT=0 명령을 실행하여 현재 페인팅의 자동 제출을 비활성화해야 합니다.

BEGIN 또는 START TRANSACTION. ;

명시적으로 트랜잭션 시작

  • COMMIT을 사용할 수도 있습니다. 둘은 동일합니다. COMMIT은 트랜잭션을 커밋하고 데이터베이스에 대한 모든 수정 사항을 영구적으로 만듭니다.

  • ROLLBACK과 동일한 ROLLBACK WORK를 사용할 수도 있습니다. 롤백은 사용자의 트랜잭션을 종료하고 진행 중인 모든 커밋되지 않은 수정 사항을 실행 취소합니다

  • SAVEPOINT 식별자 SAVEPOINT를 사용하면 트랜잭션에서 저장 포인트를 생성할 수 있으며 트랜잭션에는 여러 SAVEPOINT가 있을 수 있습니다

  • RELESE SAVEPOINT 식별자 ;지정된 저장점이 없는 경우 이 문을 실행하면 예외가 발생합니다

  • ROLLBACK TO 식별됨;거래를 표시된 지점으로 롤백

  • SET TRANSACTION; 트랜잭션의 격리 수준을 설정합니다. InnoDB 스토리지 엔진은 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ 및 SERIALIZABLE의 트랜잭션 격리 수준을 제공합니다.

  • MySQL 트랜잭션 처리에는 두 가지 주요 방법이 있습니다.

  • BEGIN, ROLLBACK, COMMIT를 사용하여 구현

  1. BEGIN

    트랜잭션 시작
  • ROLLBACK트랜잭션 롤백

  • COMMIT트랜잭션 확인

  • 직접 SET을 사용하여 MySQL의 자동 커밋 모드 변경

  • SET AU TOCOMMIT=0 비활성화 자동 제출

    • 자동 제출을 켜려면 SET AUTOCOMMIT=1
    • 트랜잭션의 네 가지 주요 특성 중 하나: 격리

    트랜잭션 A와 트랜잭션 B 사이에는 어느 정도 격리가 있습니다

      read uncommited Unread Commit
    1. 이 격리 수준에서는 모든 트랜잭션이 커밋되지 않은 다른 트랜잭션의 실행 결과를 볼 수 있습니다. 이 격리 수준은 실제 애플리케이션에서는 거의 사용되지 않습니다. 커밋되지 않은 데이터를 읽는 것을 더티 데이터라고 합니다

    • read COMMIT

  • 대부분의 데이터베이스 시스템(MySQL 제외)의 기본 격리 수준입니다. 트랜잭션은 커밋된 트랜잭션에 의해 변경된 내용만 볼 수 있습니다. 더티 읽기를 방지하지만 반복 불가능 읽기 및 팬텀 읽기에는 여전히 문제가 있습니다

    • 반복 읽기

      • MySQL의 기본 수준은 동일한 트랜잭션의 여러 인스턴스가 동시에 데이터를 읽을 때 동일한 데이터 행을 볼 수 있도록 보장합니다. 더티 읽기(Dirty Read)와 반복 불가능한 읽기는 방지되지만 팬텀 읽기(Phantom Read)라는 또 다른 문제가 발생합니다. 팬텀 읽기는 사용자가 특정 범위의 데이터 행을 읽을 때 다른 트랜잭션이 해당 범위에 새 행을 삽입하는 것을 의미합니다. 사용자가 해당 범위의 데이터 행을 다시 읽으면 새로운 팬텀 행이 발견됩니다. InnoDB 및 Falcon 스토리지 엔진은 MVCC(다중 버전 동시성 제어) 메커니즘을 통해 이 문제를 해결합니다. MVCC 메커니즘은 반복 읽기의 격리 수준에서 사용되며 선택 작업은 버전 번호를 업데이트하지 않지만 스냅샷 읽기(기록)입니다. 버전) ; 삽입, 업데이트 및 삭제는 현재 읽기(현재 버전)인 버전 번호를 업데이트합니다.

      • serialized

    • 가장 높은 격리 수준으로 트랜잭션 주문을 강제하여 불가능하게 합니다. 서로 충돌하여 팬텀 읽기 문제를 해결합니다. 즉, 읽은 각 데이터 행에 공유 잠금을 추가합니다. 이 수준에서는 많은 시간 초과 및 잠금 경합이 발생할 수 있습니다

      • 트랜잭션 격리 수준을 설정하세요

      my.cnf 파일 설정에서

      - READ-UNCOMMITTED
      - READ-COMMITED
      - REPEATABLE-READ
      - SERIALIZABLE
      * 例如
      [mysqlId]
      transaction-isolation = READ-COMMITTED
      로그인 후 복사
    1. 동적으로 격리 수준을 설정하세요. 명령
      SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL <isolation-level>
      其中isolation-level可以是:
      - READ UNCOMMITTED
      - READ COMMITTED
      - REPEATABLE READ
      - SERIALIZABLE
      
      GLOBAL|SESSION表示事务隔离级别的作用范围:
      GLOBAL:表示对所有会话有效
      SESSION:表示对当前会话有效
      로그인 후 복사
    1. 트랜잭션 동시성 문제

    더티 읽기: 트랜잭션 A가 트랜잭션 B가 업데이트한 데이터를 읽은 다음 B가 작업을 롤백하고 A가 읽은 데이터는 더티 데이터입니다

    1. 반복 불가능합니다. 읽기: 트랜잭션 A가 여러 번 읽습니다. 동일한 데이터를 얻은 후 트랜잭션 B가 데이터를 업데이트했지만 트랜잭션 A의 다중 읽기 프로세스 중에 데이터를 제출하지 않았습니다. 결과적으로 트랜잭션 A는 동일한 데이터를 여러 번 읽었으며 결과가 일치하지 않았습니다. 팬텀 읽기: 읽기 전후의 결과 데이터 항목 수가 일치하지 않습니다. 이는 트랜잭션 A를 여러 번 읽는 동안 트랜잭션 B가 테이블에 삽입 또는 삭제 작업을 수행하기 때문입니다

    위 내용은 MySQL 트랜잭션 관련 지식 상세 소개(코드 예시)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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