1. トランザクションの 4 つの大きな特徴
原子性: トランザクション開始後は、すべての操作が完了するか完了しないかのどちらかであり、途中で停滞することはあり得ません。トランザクションの実行中にエラーが発生した場合、トランザクションが開始される前の状態にロールバックされ、すべての操作は発生しなかったかのように行われます。
一貫性: トランザクションの開始および終了の前後で、データベースの整合性制約に違反しません。
分離: 同時に同じデータを要求できるのは 1 つのトランザクションだけであり、異なるトランザクション間の干渉はありません。
耐久性 (耐久性): トランザクションの完了後、トランザクションによるデータベースへのすべての更新はデータベースに保存され、ロールバックすることはできません。
2. トランザクションの同時実行の問題
ダーティ リード: トランザクション A はトランザクション B によって更新されたデータを読み取り、B は操作をロールバックし、A はデータを読み取ります。ダーティ データ
Non-repeatable reading: (トランザクション A は同じデータを複数回読み取り、トランザクション B はトランザクション A の複数回読み取り中にデータを更新およびコミットするため、トランザクション A は複数回読み取ります。 (焦点: データ変更)
ファントム リーディング: システム管理者 A はデータベース内のすべての生徒の成績を特定のスコアから ABCDE 成績に変更しましたが、システム管理者 B はこれで変更されました。ある時刻になると、特定のスコアを持つレコードが挿入され、システム管理者Aが変更を完了したところ、まだ変更されていないレコードが1つ残っていることに気づき、まるで幻覚を見たような状態をファントム・リーディングと呼びます。 (焦点: データの追加または削除)
要約: 非反復読み取りとファントム読み取りは混同されやすいですが、非反復読み取りは変更に焦点を当て、ファントム読み取りは追加または削除に焦点を当てます。非反復読み取りの問題を解決するには、条件を満たす行をロックするだけで済みますが、ファントム読み取りの問題を解決するには、テーブルをロックする必要があります
3. MySQL トランザクション分離レベル
非コミット読み取り (READ UNCOMMITED) (コミットされていないデータを読み取ることができます。ダーティ読み取り、これらのデータはダーティ データと呼ばれます)
READ COMMITED (コミットされたデータを読み取ることができ、非コミット データを読み取ることができます)反復可能な読み取り)
RePEATABLE READ) トランザクションの実行中に表示されるデータは、トランザクションの開始時に表示されるデータと常に一致します。もちろん、反復可能な読み取り分離レベルでは、コミットされていない変更も他のトランザクションからは見えません。
シリアル化可能 (SERIALIZABLE) (読み取り操作は暗黙的に共有ロックを取得します。これにより、異なるトランザクション間の相互排他が保証されます。テーブルのロックについて考える必要はありません。欠点も明らかです。テーブルのロックを参照してください。理解できるでしょう。 、効率の問題)
推奨チュートリアル: "Mysql チュートリアル"
以上がMySQL トランザクションの 4 つの分離レベルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。