수정 방법: 1. 명령 창에서 "set session transaction isolation level transaction level;" 문을 실행합니다. 2. "mysql.ini" 파일을 열고 "transaction-isolation=transaction level" 문을 추가합니다. .
이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.
mysql 트랜잭션 격리 수준
트랜잭션의 격리 수준은 커밋되지 않은 읽기(커밋되지 않은 읽기), 커밋된 읽기(커밋된 읽기), 반복 읽기(반복 읽기), 직렬화 가능(직렬화 가능)으로 나뉩니다.
Read Uncommitted(커밋되지 않은 콘텐츠 읽기)
이 격리 수준에서는 모든 트랜잭션이 커밋되지 않은 다른 트랜잭션의 실행 결과를 볼 수 있습니다. 이 격리 수준은 성능이 다른 수준보다 그다지 좋지 않기 때문에 실제 응용 프로그램에서는 거의 사용되지 않습니다. 커밋되지 않은 데이터를 읽는 것을 더티 읽기(dirty read)라고도 합니다.
Read Committed(커밋 내용 읽기)
이것은 대부분의 데이터베이스 시스템의 기본 격리 수준입니다(MySQL 기본값은 아님). 이는 격리의 간단한 정의를 충족합니다. 트랜잭션은 커밋된 트랜잭션에 의해 변경된 내용만 볼 수 있습니다. 이 격리 수준은 소위 반복 불가능한 읽기도 지원합니다. 동일한 트랜잭션의 다른 인스턴스가 인스턴스 처리 중에 새로운 커밋을 가질 수 있으므로 동일한 선택이 다른 결과를 반환할 수 있기 때문입니다.
반복 읽기(반복 가능)
이는 MySQL의 기본 트랜잭션 격리 수준으로, 동시에 데이터를 읽을 때 동일한 트랜잭션의 여러 인스턴스가 동일한 데이터 행을 볼 수 있도록 합니다. 그러나 이론적으로 이는 팬텀 읽기(phantom read)라는 또 다른 까다로운 문제로 이어질 수 있습니다. 간단히 말해서, 팬텀 읽기는 사용자가 특정 범위의 데이터 행을 읽을 때 다른 트랜잭션이 해당 범위에 새 행을 삽입하는 것을 의미합니다. 사용자가 해당 범위의 데이터 행을 읽으면 새로운 "팬텀"이 있음을 알게 됩니다. . InnoDB와 Falcon 스토리지 엔진은 MVCC(Multiversion Concurrency Control) 메커니즘을 통해 이 문제를 해결합니다.
직렬화 가능
이것은 가장 높은 격리 수준으로 트랜잭션이 서로 충돌하지 않도록 강제로 주문하여 팬텀 읽기 문제를 해결합니다. 즉, 읽은 각 데이터 행에 공유 잠금을 추가합니다. 이 수준에서는 시간 초과와 잠금 경합이 많이 발생할 수 있습니다.
mysql 트랜잭션 격리 수준 수정
방법 1: 수정 명령 실행
//查看当前事物级别: SELECT @@tx_isolation;
//设置mysql的隔离级别: set session transaction isolation level 需要设置的事务隔离级别
예
//设置read uncommitted级别: set session transaction isolation level read uncommitted; //设置read committed级别: set session transaction isolation level read committed; //设置repeatable read级别: set session transaction isolation level repeatable read; //设置serializable级别: set session transaction isolation level serializable;
방법 2: mysql.ini 구성 수정
mysql.ini 열기 구성 파일에
#可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. [mysqld] transaction-isolation = REPEATABLE-READ
를 추가하세요. 여기서 전역 기본값은 REPEATABLE-READ입니다. 실제로 MySQL도 이 수준을 기본값으로 합니다
.위 내용은 mysql에서 트랜잭션 격리 수준을 수정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!