トランザクションの概念: 単一の論理的な作業単位によって完全に実行されるか、まったく実行されない一連の操作。簡単に理解すると、すべてのデータ操作はトランザクションの論理作業単位で実行されるということです。
トランザクションの 4 つのプロパティ: ACID。
A: アトミック、アトミック。原子性は不可分性を強調し、データベースを実行するプロセスをエンティティ オブジェクトに抽象化します。このオブジェクトは、実行されると、プロセス全体が完了するか、または実行されません。
この利点により、データの整合性と正確性が保証されます。最も実際的な例は、同じ銀行カードが転送プロセス中に突然壊れ、ロールバック後にデータが確実に保存されることです。これにより、カードの残高が減ることはありません。
C: 一貫しています。一貫性とアトミック性の理解は基本的に同じであり、どちらもデータの整合性を確保するためのものです。たとえば、トランザクションは追加、削除、変更、クエリの 4 つの操作がすべて実行された場合にのみ実行されます。成功してもステータスは成功のままであり、操作の実行が失敗する限り失敗ステータスとなり、ステータスの統一性が保証されます。
I: 断熱、隔離。分離は同時トランザクションに対して存在します。トランザクションは互いに分離されており、相互に影響しません。分離性が高い場合、トランザクションが別のトランザクションにアクセスする場合、トランザクションが実行される前の状態、または実行が完了した後の状態にアクセスしますが、最初のトランザクションの実行の間の状態にはアクセスしません。トランザクション分離レベルを下げるには、データベースの設計時に実際の要件に基づいてすべてのトランザクションを評価する必要があります。
トランザクションの分離は、浅いものから深いものに分けることができます: READ UNCOMMITTED (コミットされていない読み取り)---READ COMMITTED (コミットされた読み取り)---REPEATABLE READ (反復可能な読み取り)---SERIALIZABLE (シリアル化)
(1) SERIALIZABLE (シリアル化)
トランザクション A が終了するまで範囲ロック (テーブル ロック、ページ ロックなど。範囲ロックについては詳しく勉強していません) を追加します。これにより、他のトランザクション B がこの範囲内で挿入、更新、その他の操作を実行できなくなります。
ファントムリード、ダーティリード、ノンリピータブルリードなどの問題は発生しません。
(2) REPEATABLE READ (反復読み取り)
読み出したレコードに対して、トランザクションAが終了するまで共有ロックを付加します。他のトランザクション B がこのレコードを変更しようとすると、トランザクション A が終了するまで待機します。
考えられる問題: 範囲クエリを実行すると、ファントム読み取りが発生する可能性があります。
(3) READ COMMITTED
トランザクションAでデータを読み込むと、レコードに共有ロックがかかりますが、読み出し後すぐに共有ロックが解放されます。他のトランザクション B がこのレコードを変更しようとすると、トランザクション A 全体が終了することなく、A の読み取りプロセスが終了するまで待機します。したがって、トランザクション A の異なる段階での同じレコードの読み取り結果は異なる場合があります。 、
考えられる問題: 読み取りが再現できない。
(4) READ UNCOMMITTED (コミットされていない読み取り)
共有ロックを追加しません。したがって、トランザクション A の読み取りプロセス中に、他のトランザクション B が同じレコードを変更する可能性があり、その結果、A によって読み取られたデータが破損したり、不完全または不正なデータになったりする可能性があります。
また、トランザクション B で変更されたデータ (コミットされていない) は、トランザクション A で読み取ることができます。たとえば、トランザクション B は R レコードを変更しましたが、送信されませんでした。このとき、トランザクションAでRレコードを読み込むと、Bが変更したデータが読み込まれます。
考えられる問題: ダーティリード。
D: 期間、持続性。トランザクションの実行が完了すると、その後システムに致命的な障害が発生した場合でも、データへの影響は持続します。
上記は、MYSQL データベース トランザクションの再理解の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。