Spring,springbootのトランザクション(トランザクション独立性レベルの詳細)
トランザクション独立性レベル
1:DEFAULT
DEFAULTこれはspringのデフォルトの独立性レベルであり、データベースのデフォルトのトランザクション独立性レベルを使用することを示します.他の4つは、JDBCの独立性レベルに対応しています.
2:READ_UNCOMMITTED
READ_UNCOMMITTEDこれはトランザクションの最も低い独立性レベルであり、このトランザクションがコミットされていないデータを別のトランザクションで見ることができることを許可します.この独立性レベルでは、汚れた読み取り、重複しない読み取り、幻の読み取りが発生します.
3:READ_COMMITTED
これはSqlサーバです.Oracleのデフォルト独立性レベルREAD_COMMITTEDは、あるトランザクションが変更したデータがコミットされた後、別のトランザクションによって読み込まれることを保証します.このトランザクション独立性レベルでは、汚れた読み取りを回避できますが、重複しない読み取りと幻の読み取りが発生する可能性があります.
4:REPEATABLE_READ
これはMySQL-InnoDBのデフォルトの独立性レベルREPEATABLEです.READというトランザクション・アイソレーション・レベルは、ダーティ・リードを防止し、重複して読むことはできません.しかし、幻読が現れる可能性があります.
5:SERIALIZABLE
SERIALIZABLEトランザクションは、順次実行されるように処理される.汚れた読みを防止し、繰り返して読むことができず、幻読みを防止する.
汚い読み、繰り返してはいけない読み、幻読み
1:ダーティリード
ダーティリードとは、1つのトランザクションがデータにアクセスし、データが変更されてもデータベースにコミットされていない場合、別のトランザクションもこのデータにアクセスし、このデータを使用します.
2:繰り返し不可
繰り返し不可:1つのトランザクションで前後2回の読み取りの結果が発生せず、繰り返し不可になります.
3:幻読み
最初のトランザクションは、テーブル内のすべてのデータ行を変更しました.同時に、2番目のトランザクションはテーブルに新しいデータの行を挿入します.では、最初のトランザクションを操作したユーザーは、テーブルに変更されていないデータ行があることを発見します.
1:DEFAULT
DEFAULTこれはspringのデフォルトの独立性レベルであり、データベースのデフォルトのトランザクション独立性レベルを使用することを示します.他の4つは、JDBCの独立性レベルに対応しています.
2:READ_UNCOMMITTED
READ_UNCOMMITTEDこれはトランザクションの最も低い独立性レベルであり、このトランザクションがコミットされていないデータを別のトランザクションで見ることができることを許可します.この独立性レベルでは、汚れた読み取り、重複しない読み取り、幻の読み取りが発生します.
3:READ_COMMITTED
これはSqlサーバです.Oracleのデフォルト独立性レベルREAD_COMMITTEDは、あるトランザクションが変更したデータがコミットされた後、別のトランザクションによって読み込まれることを保証します.このトランザクション独立性レベルでは、汚れた読み取りを回避できますが、重複しない読み取りと幻の読み取りが発生する可能性があります.
4:REPEATABLE_READ
これはMySQL-InnoDBのデフォルトの独立性レベルREPEATABLEです.READというトランザクション・アイソレーション・レベルは、ダーティ・リードを防止し、重複して読むことはできません.しかし、幻読が現れる可能性があります.
5:SERIALIZABLE
SERIALIZABLEトランザクションは、順次実行されるように処理される.汚れた読みを防止し、繰り返して読むことができず、幻読みを防止する.
汚い読み、繰り返してはいけない読み、幻読み
1:ダーティリード
ダーティリードとは、1つのトランザクションがデータにアクセスし、データが変更されてもデータベースにコミットされていない場合、別のトランザクションもこのデータにアクセスし、このデータを使用します.
1: 1000, 8000, 。
2: 8000( )。
3: , 。 1000。
: , 。
2:繰り返し不可
繰り返し不可:1つのトランザクションで前後2回の読み取りの結果が発生せず、繰り返し不可になります.
1: 1 , 1000, 。
2: 2 , 8000, 。
3: 1 , 8000。
: , 。( )
3:幻読み
最初のトランザクションは、テーブル内のすべてのデータ行を変更しました.同時に、2番目のトランザクションはテーブルに新しいデータの行を挿入します.では、最初のトランザクションを操作したユーザーは、テーブルに変更されていないデータ行があることを発見します.
1: 1 , 1000 1000 。
2: 2 , 1000.
3: 1 , 1000 1001 。
: , 。( )