MySQL 同時実行性: 同時実行環境でのデータの整合性の確保
データベース システムの領域では、同時実行性は、アクセスする複数のリクエストを処理する際に重要な役割を果たします。同時にデータベースも作成します。前述したように、MySQL データベースでは InnoDB エンジンを利用しているため、複数のユーザーがレコードを同時に変更しようとすると、データの整合性の問題が発生する可能性があるという懸念が生じます。
MySQL 同時実行メカニズム
デフォルトでは、MySQL の InnoDB エンジンは行レベルのロックを実装し、データ破損に対する基本的な保護を提供します。トランザクションによって行が変更されると、MySQL はその行に対して排他ロックを取得し、ロックが解放されるまで他のトランザクションがその行にアクセスすることを防ぎます。
さらに、InnoDB はアトミック操作をサポートしています。つまり、個々の SQL ステートメントは次のように実行されます。分割できない単位。たとえば、Cars テーブルの Sold フィールドを調整する UPDATE ステートメントはアトミックとみなされ、その実行により、他の同時実行に関係なく、フィールドの 1 の増分が保証されます。
複雑な同時実行シナリオの処理
ただし、指定した例のように、複数のステートメントが相互に依存する場合は複雑さが生じます。
a = SELECT Sold FROM Cars; UPDATE Cars SET Sold = a + 1;
このシナリオでは、SELECT ステートメントは現在の Sold 値 (a) を取得します。その後の UPDATE ステートメントは、その値を使用して Sold を 1 ずつ増分します。ただし、これらのクエリの間に別のユーザーが Cars テーブルの Sold を更新する可能性があり、その結果、誤った増分が発生する可能性があります。
この問題を解決し、データを確保するには整合性を維持しながら、MySQL はトランザクションを提供します。トランザクションを使用すると、一連の SQL ステートメントを単一のアトミック単位にグループ化できます。次のコードは、トランザクションを使用して同時実行性の課題に対処する方法を示しています。
BEGIN; a = SELECT Sold FROM Cars; UPDATE Cars SET Sold = a + 1; COMMIT;
依存するステートメントをトランザクション内に囲むことにより、MySQL はすべてのステートメントが 1 つのユニットとして正常に実行されるか、またはいずれも実行されないことを保証します。トランザクション中に例外が発生した場合、変更はロールバックされ、データの一貫性が維持されます。
結論
MySQL の InnoDB エンジンは、行レベルのロックを含む堅牢な同時実行メカニズムを提供します。そしてアトミック操作。単純な更新操作の場合は、これらの機能で十分です。ただし、依存ステートメントを含む複雑なシナリオでは、データの整合性を維持し、同時環境で一貫した結果を保証するためにトランザクションが不可欠になります。
以上がトランザクションはどのようにして同時 MySQL 環境でデータの整合性を確保できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。