推奨 (無料): mysql チュートリアル
# この記事の実験のテスト環境: Windows 10 cmd MySQL5.6.36 InnoDB
1. トランザクションの基本要素 (ACID)
1. 原子性: トランザクション開始後、すべての操作が完了するか完了しないかのどちらかです。 、途中で停滞することは不可能です。トランザクションの実行中にエラーが発生した場合、トランザクションが開始される前の状態にロールバックされ、すべての操作は発生しなかったかのように行われます。つまり、物事は、化学で習う物質の基本単位である原子のように、分割できない全体であるということです。
2. 一貫性: トランザクションの開始前と終了後、データベースの整合性制約は破壊されません。たとえば、A が B にお金を送金した場合、A がそのお金を差し引くが、B が受け取らないということは不可能です。
3. 分離: 同時に、同じデータを要求できるのは 1 つのトランザクションだけであり、異なるトランザクション間の干渉はありません。たとえば、A は銀行カードからお金を引き出していますが、B は A の引き出しプロセスが完了するまでこのカードにお金を送金することはできません。
4. 耐久性: トランザクションの完了後、トランザクションによるデータベースへのすべての更新はデータベースに保存され、ロールバックすることはできません。
2. トランザクションの同時実行の問題
1. ダーティ リード: トランザクション A はトランザクション B によって更新されたデータを読み取り、B は操作をロールバックします。の場合、A によって読み取られたデータはダーティ データです。
2. 反復不可能な読み取り: トランザクション A は同じデータを複数回読み取り、トランザクション B はトランザクション A で同じデータを複数回読み取ります。 、データが更新および送信されたため、トランザクション A が同じデータを複数回読み取ると、一貫性のない結果が発生しました。
3. ファントム リーディング: システム管理者 A はデータベース内のすべての生徒のスコアを特定のスコアから ABCDE 成績に変更しましたが、システム管理者 B はこの時点の記録に特定のスコアを挿入しました。システム管理者Aが修正を完了したところ、まだ修正されていないレコードが1つ残っていることに気づき、まるで幻覚を見たかのような状態になり、これをファントムリーディングといいます。
要約: 非反復読み取りとファントム読み取りは混同されやすいです。非反復読み取りは変更に焦点を当て、ファントム読み取りは追加または削除に焦点を当てます。反復不能読み取りの問題を解決するには、条件を満たす行をロックするだけでよく、ファントム読み取りの問題を解決するには、テーブルをロックする必要があります
3. MySQL トランザクション分離レベル#Non-repeatable read | ##ファントムリード##Read-uncommitted | Yes | |
Yes | Non-repeatable read (read-committed) ) | No | |
Yes | Repeatable-read | No | |
はい | #シリアル化可能 | ##No | ##No##No |
以上がMySQL の 4 つのトランザクション分離レベルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。