MySQLのトランザクション分離レベルピット一度覚えておいてください

最近、コードのデバッグを書くとき、私は、問題が発生しました。

経験の問題

次のように具体的な動作は以下のとおりです
。1.コール手順A、方法Aおよび注釈@Transactionalトランザクションを追加します。
方法A、クエリ内ではフィールドFの値を更新
3.その他の論理処理。
4.クエリと印刷ログは、フィールドF.を備えたキーフィールドの値を記録します
前記方法は終了します。
ただ、コードのこの部分を取ったが、この方法は非常に長い書かれているので、そのロジックの多くは、ゆっくりとしかデバッグ、何の法律を見ていません。
私は、マニュアル内で再び実行するSQLデータベースをコピー、デバッグするとき、私は疑問にデータを感じてログを表示すると、ステップ4でブレークポイントにヒットし
方法では、データベースに、同じSQLを実行し、結果は同じではありませんでした。
モンゴルは、IDEのバグで少し円を、開始した、問題は次のようにキャッシュされる場合があります。
ステップスルー時に、数回の試運転、観察手動でデータベースに値をチェックするためのフィールド、メソッドは常に最初の値が変更されていないです
突然、私は理解して、元のトランザクション分離レベルが生じます。

トランザクション分離レベル

これらの知識は、実際には、面接の前に詩に戻っています。長い時間今、突然のすべてが光を忘れます。
Q:データベースの分離レベルは何ですか?
非コミット読み取り(読み取りコミットされていない)READ COMMITTED(読み取りコミット)反復可能読み取り(反復可能読み取り)シリアライズ(直列化可能)。
Q:デフォルトのMySQLデータベース分離レベルは何ですか?
反復可能読み取り(反復可能読み取り)

一貫性非ロック読み取り

InnoDBストレージエンジンを使用してMySQL。SELECT操作は、非ロックの使用は、一貫性を読み取ります。
READ COMMITTEDトランザクション分離レベルでは、不均一性のためのスナップショットデータは、常にデータのスナップショットを読んで、最新のを読み取られた行でロックされています。
REPEATABLE READトランザクション分離レベルでは、非一貫性のためのスナップショット・データは常に始まったトランザクションの読み込んだデータラインバージョンを読み込みます。
トランザクションAがオンになった後、データを変更することを私が遭遇した問題は、まだコミットし、トランザクションBは検索しました。
デフォルトのREPEATABLE READトランザクション分離レベルなので、データはトランザクションのラインバージョンが始まったことを読みました。

参考:「MySQLのインサイド」

おすすめ

転載: www.cnblogs.com/expiator/p/11610642.html