ホームページ  >  記事  >  データベース  >  mysqlでトランザクション分離レベルを変更する方法

mysqlでトランザクション分離レベルを変更する方法

WBOY
WBOY転載
2023-04-17 20:19:015493ブラウズ

修正方法: 1. コマンド ウィンドウで「set sessiontransactionisolationleveltransactionlevel;」ステートメントを実行します; 2.「mysql.ini」ファイルを開き、「transaction- 「isolation=transaction level」ステートメントで十分です。

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

mysql トランザクション分離レベル

トランザクションの分離レベルは、非コミット読み取り (コミットされていない読み取り)、コミットされた読み取り (コミットされた読み取り)、反復可能な読み取り (反復可能) に分類されます。 ) 読み取り)、シリアル化可能。

  • Read Uncommitted(コミットされていないコンテンツの読み取り)

    この分離レベルでは、すべてのトランザクションが他のコミットされていないトランザクションの実行結果を確認できます。この分離レベルは他のレベルと比べてパフォーマンスがそれほど優れていないため、実際のアプリケーションではほとんど使用されません。コミットされていないデータの読み取りは、ダーティ リードとも呼ばれます。

  • Read Committed(コミット内容の読み取り)

    これは、ほとんどのデータベース システムのデフォルトの分離レベルです (ただし、MySQL のデフォルトではありません)。これは分離の単純な定義を満たしています。つまり、トランザクションはコミットされたトランザクションによって行われた変更のみを確認できます。この分離レベルは、いわゆる非反復読み取りもサポートします。これは、同じトランザクションの他のインスタンスがインスタンスの処理中に新しいコミットを持つ可能性があるため、同じ選択が異なる結果を返す可能性があるためです。

  • Repeatable Read(rereadable)

    これは、MySQL のデフォルトのトランザクション分離レベルです。同じトランザクションの複数のインスタンスが同時にデータを読み取ることが保証されます。データ行。しかし理論的には、これはファントムリードという別のやっかいな問題を引き起こすことになります。簡単に言えば、ファントム読み取りとは、ユーザーが特定の範囲のデータ行を読み取るときに、別のトランザクションがその範囲に新しい行を挿入することを意味します。ユーザーが範囲内のデータ行を再度読み取ると、新しい「ファントム」があることがわかります。わかりました。 InnoDB および Falcon ストレージ エンジンは、Multiversion Concurrency Control (MVCC) メカニズムを通じてこの問題を解決します。

  • Serializable

    これは最高の分離レベルです。トランザクションが互いに競合しないように強制的に順序付けすることで、ファントム読み取りの問題を解決します。つまり、読み取られた各データ行に共有ロックが追加されます。このレベルでは、多数のタイムアウトやロック競合が発生する可能性があります。

#mysql トランザクション分離レベルの変更

方法 1: コマンド変更の実行

//查看当前事物级别:
SELECT @@tx_isolation;

mysqlでトランザクション分離レベルを変更する方法

//设置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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。