この記事では、MySQL トランザクション分離について説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。
#トランザクションの概要
トランザクションは、アトミックな SQL クエリのセット、または独立した作業です。ユニット。つまり、トランザクション内のステートメントはすべて正常に実行されるか、すべて失敗するかのどちらかです。 Mysql では、トランザクション サポートはエンジン層で実装されていますが、すべての Mysql エンジンがトランザクションをサポートしているわけではありません。たとえば、MyISAM エンジンはトランザクションをサポートしていません。これが、MyISAM が InnoDB に置き換えられた重要な理由の 1 つです。 。 トランザクションに関して言えば、間違いなく ACID を思い浮かべます。絶縁レベル
データベース内で複数のトランザクションが同時に実行されると、トランザクション分離レベルの概念により、ダーティ リード、反復不能リード、ファントム リードなどの問題が発生する可能性があります。 SQL 標準では、次の 4 つの分離レベルが定義されています。transaction-isolation を目的の分離レベルに設定することです。
mysql> show variables like 'transaction_isolation'; +-----------------------+-----------------+ | Variable_name | Value | +-----------------------+-----------------+ | transaction_isolation | REPEATABLE-READ | +-----------------------+-----------------+ 1 row in set (0.00 sec)
トランザクション分離の実装
Mysql では、実際には、各レコードの更新によってロールバック操作も記録されます。 、前の状態の最新の値を取得できます。 システムは、ロールバック ログを必要とするトランザクションがなくなると、ロールバック ログが削除されると自動的に判断します。 長いトランザクションの使用が推奨されない理由: 長いトランザクションは、システム内に非常に古いトランザクション ビューが存在することを意味します。これらのトランザクションはいつでもデータベース内のあらゆるデータにアクセスできるため、このトランザクションが送信される前に、データベースで使用される可能性のあるロールバック レコードを保持する必要があります。これにより、多くのストレージ領域が占有されます。同時に、長いトランザクションもロック リソースを占有し、ライブラリ全体がダウンする可能性があります。トランザクションの開始方法
クエリの長いトランザクション:
次のステートメントは、60 秒を超えるトランザクションをクエリします。mysql> select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60; Empty set (0.00 sec)
mysql ビデオ チュートリアル 」
以上がMySQL トランザクション分離についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。