ホームページ >データベース >mysql チュートリアル >MySQL トランザクション関連の知識の詳細な紹介 (コード例)
この記事では、MySQL トランザクション関連の知識 (コード例) を詳しく紹介します。必要な方は参考にしてください。助けてくれた。
MySQL トランザクションとトランザクション分離レベル
MySQL トランザクションは、主に大規模な操作と高度に複雑なデータを処理するために使用されます。例えば、人事管理システムにおいて、個人を削除すると、その個人の基本情報が削除され、メールボックスや記事など、その個人に関連する情報も削除されます。これらのデータベース操作文がトランザクションを構成します。 (推奨コース: MySQL チュートリアル )
#原子性: トランザクション内のすべての操作は、すべて実行されるか、何も実行されず、途中で終了しません。トランザクションの実行中にエラーが発生した場合は、トランザクションの開始前の状態にロールバックされます。
整合性: トランザクションの開始前とトランザクションの開始後トランザクションが終了しても、データベースのセックスの整合性は損なわれません。これは、書き込まれるデータが、データの精度や連結など、事前に設定されたすべてのルールに完全に準拠する必要があり、後続のデータベースがスケジュールされた作業を自発的に完了できることを意味します
分離特徴: データベースでは、複数のトランザクションが同時にデータを読み取り、書き込み、変更できます。分離により、複数のトランザクションが同時に実行される場合のクロス実行によるデータの不整合を防ぐことができます。トランザクション分離は、非コミット読み取り、コミット読み取り、反復可能読み取り、シリアル化可能など、さまざまなレベルに分割されます。
永続性:トランザクション処理完了後のデータの変更は次のとおりです。
# MySQL コマンドラインのデフォルト設定では、トランザクションは自動的に送信されます。 COMMIT 操作は、SQL ステートメントの実行直後に実行されます。したがって、トランザクションを明示的に開始するには、コマンド BEGIN または START TRANSACTION を使用するか、コマンド SET AUTOCOMMIT=0 を実行して現在のペイントの自動送信の使用を無効にする必要があります。トランザクション制御ステートメント:
BEGIN または START TRANSACTION; 明示的にトランザクションを開始します
COMMIT はトランザクションをコミットし、データベースに対するすべての変更を永続的にします。
ロールバックはユーザーのトランザクションを終了し、進行中のコミットされていない変更をすべて元に戻します。
MySQL トランザクション処理には 2 つの主な方法があります。
ROLLBACK
COMMIT
SET を直接変更するMySQL 自動送信モード:
SET AUTOCOMMIT=1 は自動送信をオンにします
read uncommitted Read uncommitted
MySQL のデフォルト レベルでは、データを同時に読み取るときに、同じトランザクションの複数のインスタンスが同じデータ行を参照できるようになります。ダーティ リードと非反復読み取りは回避されますが、ファントム リードという別の問題が発生します。ファントム読み取りとは、ユーザーが特定の範囲のデータ行を読み取るときに、別のトランザクションがその範囲に新しい行を挿入し、その範囲内のデータ行を再度読み取ると、新しいファントム行が見つかることを意味します。 InnoDB と Falcon ストレージ エンジンは、マルチバージョン同時実行制御 (MVCC) メカニズムを通じてこの問題を解決します。
MVCC メカニズムは、Repeatable Read の分離レベルで使用され、選択操作は更新されません。バージョン番号は読み取りのスナップショット (履歴バージョン) です。挿入、更新、および削除では、現在の読み取り (現在のバージョン) であるバージョン番号が更新されます。
serializable- 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:表示对当前会话有效
トランザクションの同時実行の問題
Non-repeatable read: トランザクション A は同じデータを複数回読み取り、トランザクション B はデータを更新しますが、トランザクション A の複数回の読み取り中にそれをコミットしません。その結果、トランザクション A は同じデータを複数回読み取り、結果は次のようになります。 inconsistent
ファントム読み取り: 前後で読み取ったデータ数が異なります。これは、トランザクション A の複数読み取り中に、トランザクション B がテーブル
以上がMySQL トランザクション関連の知識の詳細な紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。