検索
ホームページデータベースmysql チュートリアルMySQL トランザクション分離についての簡単な説明

MySQL トランザクション分離についての簡単な説明

Apr 04, 2020 am 09:29 AM
mysqlトランザクションの分離

この記事では、MySQL トランザクション分離について説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。

MySQL トランザクション分離についての簡単な説明

#トランザクションの概要

トランザクションは、アトミックな SQL クエリのセット、または独立した作業です。ユニット。つまり、トランザクション内のステートメントはすべて正常に実行されるか、すべて失敗するかのどちらかです。

Mysql では、トランザクション サポートはエンジン層で実装されていますが、すべての Mysql エンジンがトランザクションをサポートしているわけではありません。たとえば、MyISAM エンジンはトランザクションをサポートしていません。これが、MyISAM が InnoDB に置き換えられた重要な理由の 1 つです。 。

トランザクションに関して言えば、間違いなく ACID を思い浮かべます。

  • 原子性

  • 一貫性

  • ##絶縁性

  • 耐久性

絶縁レベル

データベース内で複数のトランザクションが同時に実行されると、トランザクション分離レベルの概念により、ダーティ リード、反復不能リード、ファントム リードなどの問題が発生する可能性があります。

SQL 標準では、次の 4 つの分離レベルが定義されています。

  1. READ UNCOMMITTED (コミットされていない読み取り)

    まだ変更されていない場合でも、トランザクション内の変更。 commit され、他のトランザクションから参照できます。トランザクションは、ダーティ リードとも呼ばれる、コミットされていないデータを読み取ることができます。

  2. READ COMMITTED

    トランザクションが送信されると、その変更は他のトランザクションから確認できるようになります。トランザクション内で同じクエリが 2 回実行されると結果が異なる可能性があるため、このレベルは非反復読み取りとも呼ばれます。

  3. REPEATABLE READ(繰り返し読み取り)

    トランザクションの実行中、データはトランザクションの開始時に表示されたデータと常に一致します。もちろん、このレベルでは、コミットされていないデータ変更も他のトランザクションからは見えません。

  4. SERIALIZABLE(シリアル化可能)

    レコードの同じ行については、書き込みと読み取りがロックされます。読み取り/書き込みロックの競合が発生した場合、後でアクセスされるトランザクションは、前のトランザクションが完了するまで待ってから続行すると、タイムアウトやロック競合の問題が大量に発生します。

実装に関しては、データベース内にビューが作成され、アクセス時にはビューのロジックが優先されます。

Repeatable Read の分離レベルでは、このビューはトランザクションの開始時に作成され、トランザクション全体で使用されます。

読み取り送信の分離レベルでは、SQL ステートメントの実行開始時にこのビューが作成されます。

読み取り非コミット分離レベルでは、ビューの概念なしで、レコードの最新の値が直接返されます。

シリアル化された分離レベルでは、並列アクセスを避けるために直接ロックします。

設定方法は、起動パラメータ

transaction-isolation を目的の分離レベルに設定することです。

現在の設定を表示:

mysql> show variables like 'transaction_isolation';
+-----------------------+-----------------+
| Variable_name         | Value           |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)

要するに、存在は合理的です。さまざまな分離レベルはさまざまなシナリオに適しています。ビジネス シナリオに基づいて決定する必要があります。

トランザクション分離の実装

Mysql では、実際には、各レコードの更新によってロールバック操作も記録されます。 、前の状態の最新の値を取得できます。

システムは、ロールバック ログを必要とするトランザクションがなくなると、ロールバック ログが削除されると自動的に判断します。

長いトランザクションの使用が推奨されない理由:

長いトランザクションは、システム内に非常に古いトランザクション ビューが存在することを意味します。これらのトランザクションはいつでもデータベース内のあらゆるデータにアクセスできるため、このトランザクションが送信される前に、データベースで使用される可能性のあるロールバック レコードを保持する必要があります。これにより、多くのストレージ領域が占有されます。同時に、長いトランザクションもロック リソースを占有し、ライブラリ全体がダウンする可能性があります。

トランザクションの開始方法

  • トランザクション ステートメントを明示的に開始します。トランザクションを開始または開始します。送信とはコミットを意味します。 return ロールバックを使用します。

  • set autocommit = 0、このコマンドはスレッドの自動送信をオフにします。つまり、select ステートメントが実行されると、トランザクションが開始され、自動的にはコミットされません。アクティブにコミットまたはロールバックを実行するか、切断するまで。

私の個人的な提案は、長いトランザクションの発生を避けるために、最初の方法でトランザクションを明示的に開始することです。

set autocommit = 1 の場合、begin で明示的にトランザクションを開始した場合、commit を実行するとトランザクションはコミットされます。コミットワークとチェーンを実行すると、トランザクションがコミットされ、次のトランザクションが自動的に開始されます。これにより、begin ステートメントを再度実行するオーバーヘッドも節約されます。

クエリの長​​いトランザクション:

次のステートメントは、60 秒を超えるトランザクションをクエリします。

mysql> select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60;
Empty set (0.00 sec)

要約すると、開発プロセス中に、長いトランザクションを使用することをできるだけ少なくしてください。それが避けられない場合は、論理ログ スペースが十分な大きさであることを確認し、動的なログ スペースの増加をサポートしてください。 Innodb_trx テーブルを監視し、ロング トランザクション アラームを報告します。

推奨: 「

mysql ビデオ チュートリアル

以上がMySQL トランザクション分離についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はtsmliyunで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
MySQLはデータレプリケーションをどのように処理しますか?MySQLはデータレプリケーションをどのように処理しますか?Apr 28, 2025 am 12:25 AM

MySQLは、非同期、半同期、およびグループ複製の3つのモードを介してデータの複製を処理します。 1)非同期の複製パフォーマンスは高くなりますが、データが失われる可能性があります。 2)半同期複製により、データセキュリティが向上しますが、遅延が増加します。 3)グループレプリケーションは、高可用性要件に適したマルチマスターレプリケーションとフェールオーバーをサポートします。

説明ステートメントを使用してクエリパフォーマンスを分析するにはどうすればよいですか?説明ステートメントを使用してクエリパフォーマンスを分析するにはどうすればよいですか?Apr 28, 2025 am 12:24 AM

説明ステートメントは、SQLクエリのパフォーマンスを分析および改善するために使用できます。 1.説明ステートメントを実行して、クエリプランを表示します。 2。出力結果を分析し、アクセスの種類、インデックスの使用量に注意し、順序を結合します。 3.分析結果に基づいてインデックスを作成または調整し、結合操作を最適化し、フルテーブルスキャンを回避してクエリ効率を向上させます。

MySQLデータベースをバックアップして復元するにはどうすればよいですか?MySQLデータベースをバックアップして復元するにはどうすればよいですか?Apr 28, 2025 am 12:23 AM

論理バックアップにMySQLDUMPとホットバックアップにMySQLenterPriseBackupを使用することは、MySQLデータベースをバックアップする効果的な方法です。 1. mysqldumpを使用してデータベースをバックアップします:mysqldump-uroot-pmydatabase> mydatabase_backup.sql。 2。ホットバックアップにmysqlenterprisebackupを使用:mysqlbackup - user = root-password = password - backup-dir =/path/to/backupbackup。回復するときは、対応する寿命を使用します

MySQLのスロークエリの一般的な原因は何ですか?MySQLのスロークエリの一般的な原因は何ですか?Apr 28, 2025 am 12:18 AM

MySQLのクエリが遅い主な理由には、インデックスの欠落または不適切な使用、クエリの複雑さ、過剰なデータボリューム、および不十分なハードウェアリソースが含まれます。最適化の提案には以下が含まれます。1。適切なインデックスを作成します。 2。クエリステートメントを最適化します。 3.テーブルパーティションテクノロジーを使用します。 4.適切にハードウェアをアップグレードします。

mysqlのビューは何ですか?mysqlのビューは何ですか?Apr 28, 2025 am 12:04 AM

MySQLビューは、SQLクエリの結果に基づいた仮想テーブルであり、データを保存しません。 1)ビューは複雑なクエリを簡素化し、2)データセキュリティを強化し、3)データの一貫性を維持します。ビューは、テーブルのように使用できるデータベースにクエリを保存しますが、データは動的に生成されます。

MySQLと他のSQL方言の構文の違いは何ですか?MySQLと他のSQL方言の構文の違いは何ですか?Apr 27, 2025 am 12:26 AM

MySQLdiffersfromotherSQLdialectsinsyntaxforLIMIT,auto-increment,stringcomparison,subqueries,andperformanceanalysis.1)MySQLusesLIMIT,whileSQLServerusesTOPandOracleusesROWNUM.2)MySQL'sAUTO_INCREMENTcontrastswithPostgreSQL'sSERIALandOracle'ssequenceandt

MySQLパーティションは何ですか?MySQLパーティションは何ですか?Apr 27, 2025 am 12:23 AM

MySQLパーティション化により、パフォーマンスが向上し、メンテナンスが簡素化されます。 1)大きなテーブルを特定の基準(日付範囲など)、2)物理的に独立したファイルに物理的に分割する、3)MySQLはクエリするときに関連するパーティションに焦点を合わせることができます。

MySQLで特権をどのように許可して取り消しますか?MySQLで特権をどのように許可して取り消しますか?Apr 27, 2025 am 12:21 AM

mysqlで許可を許可および取り消す方法は? 1。grantallprivilegesondatabase_name.to'username'@'host 'などの許可を付与するために付与ステートメントを使用してください。 2。Revokeallprivilegesondatabase_name.from'username'@'host 'など、Revoke Statementを使用して、許可のタイムリーな通信を確保します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール