이 기사의 내용은 MySQL 트랜잭션 관련 지식에 대한 자세한 소개(코드 예제)입니다. 필요한 친구들이 참고할 수 있기를 바랍니다.
MySQL 트랜잭션 및 트랜잭션 격리 수준
MySQL 트랜잭션은 주로 대규모 작업과 복잡성이 높은 데이터를 처리하는 데 사용됩니다. 예를 들어 인사관리시스템에서 사람을 삭제하면 그 사람의 기본정보도 함께 삭제되며, 우편함, 물품 등 그 사람과 관련된 정보도 함께 삭제된다. 이러한 데이터베이스 운영문은 거래를 구성한다. (추천 과정: MySQL 튜토리얼)
MySQL에서는 Innodb 데이터베이스 엔진을 사용하는 데이터베이스나 테이블만 트랜잭션을 지원합니다
트랜잭션 처리를 사용하여 데이터베이스의 무결성을 유지하고 SQL 배치를 보장할 수 있습니다. 명령문은 모두 실행되거나 모두 실행되지 않습니다
트랜잭션은 명령문 삽입, 업데이트, 삭제를 관리하는 데 사용됩니다
일반적으로 트랜잭션은 원자성, 일관성, 격리성, 내구성이라는 4가지 조건을 충족해야 합니다.
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트랜잭션 확인
직접 SET을 사용하여 MySQL의 자동 커밋 모드 변경
MySQL의 기본 수준은 동일한 트랜잭션의 여러 인스턴스가 동시에 데이터를 읽을 때 동일한 데이터 행을 볼 수 있도록 보장합니다. 더티 읽기(Dirty Read)와 반복 불가능한 읽기는 방지되지만 팬텀 읽기(Phantom Read)라는 또 다른 문제가 발생합니다. 팬텀 읽기는 사용자가 특정 범위의 데이터 행을 읽을 때 다른 트랜잭션이 해당 범위에 새 행을 삽입하는 것을 의미합니다. 사용자가 해당 범위의 데이터 행을 다시 읽으면 새로운 팬텀 행이 발견됩니다. InnoDB 및 Falcon 스토리지 엔진은 MVCC(다중 버전 동시성 제어) 메커니즘을 통해 이 문제를 해결합니다. MVCC 메커니즘은 반복 읽기의 격리 수준에서 사용되며 선택 작업은 버전 번호를 업데이트하지 않지만 스냅샷 읽기(기록)입니다. 버전) ; 삽입, 업데이트 및 삭제는 현재 읽기(현재 버전)인 버전 번호를 업데이트합니다.
serialized
가장 높은 격리 수준으로 트랜잭션 주문을 강제하여 불가능하게 합니다. 서로 충돌하여 팬텀 읽기 문제를 해결합니다. 즉, 읽은 각 데이터 행에 공유 잠금을 추가합니다. 이 수준에서는 많은 시간 초과 및 잠금 경합이 발생할 수 있습니다
트랜잭션 격리 수준을 설정하세요
- READ-UNCOMMITTED - READ-COMMITED - REPEATABLE-READ - SERIALIZABLE * 例如 [mysqlId] transaction-isolation = READ-COMMITTED
SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL <isolation-level> 其中isolation-level可以是: - READ UNCOMMITTED - READ COMMITTED - REPEATABLE READ - SERIALIZABLE GLOBAL|SESSION表示事务隔离级别的作用范围: GLOBAL:表示对所有会话有效 SESSION:表示对当前会话有效
위 내용은 MySQL 트랜잭션 관련 지식 상세 소개(코드 예시)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!