1。トランザクションの特性ACID
1)原子性(原子性)原子性とは、トランザクションが不可分な作業単位であり、トランザクション内の操作が発生するか発生しないことを意味します。
2)整合性(整合性)トランザクションでは、トランザクションの前後のデータの整合性が一貫している必要があります。
3)複数のトランザクションの分離トランザクションの分離とは、複数のユーザーが同時にデータベースにアクセスする場合、1人のユーザーのトランザクションが他のユーザーのトランザクションによって干渉されないことを意味します。複数の同時トランザクション間のデータは互いに分離する必要があります。
4)耐久性耐久性とは、トランザクションがいったんコミットされると、データベース内のデータを永続的に変更し、障害が発生してもデータベースに影響を与えないことを意味します。
2。分離による同時アクセスの問題分離を
考慮しない場合、トランザクションには3つの同時アクセスの問題があります。
1)ダーティリード(コミットされていない読み取り):BトランザクションはAトランザクションがまだ送信していないデータを読み取り、その結果、トランザクションAはロールバックします------ Aトランザクションによって送信されたデータを読み取るにはBトランザクションが必要です
2)繰り返し不可の読み取り(コミットされた読み取り):トランザクションが更新やその他の操作を実行し、Bトランザクションで2回読み取られたデータの内容に一貫性がありません。つまり、複数回読み取られたデータの内容に一貫性がありません-----必要なものは複数のトランザクションですデータは2回目の読み取り中も一貫しています--- unpdate
3)ファントム読み取り/仮想読み取り(反復可能読み取り):トランザクションがトランザクションの前後に挿入されるデータが削除され、Bトランザクションが突然更新されると、行数に影響する行数が増減するように見える-----トランザクションで複数の読み取りが必要取られるデータの量は同じ挿入削除です
3。トランザクションの分離レベル
1)コミットされていない読み取り:コミットされていないデータを読み取り:問題を解決できません
2)コミットされた読み取り:送信されたデータを読み取ります:ダーティリードは解決できます---- oracle default
3)反復可能読み取り:再読み取り読み取り:ダーティー読み取りと非繰り返し読み取りを解決できます--- mysqlのデフォルト
4)シリアライズ可能:シリアライゼーション:ダーティリード、非反復可能リードおよび仮想リードを解決できます---ロックテーブルと同等
2. Springでの7つのトランザクション伝搬動作トランザクションの伝搬動作
。デフォルト値はPropagation.REQUIREDです。次のように、他のトランザクション伝播動作を手動で指定できます。
(1)伝播。必須
トランザクションが現在存在する場合はトランザクションが追加され、トランザクションが存在しない場合は新しいトランザクションが作成されます。
(2)伝播、サポート
現在トランザクションがある場合はトランザクションが追加され、トランザクションがない場合は非トランザクション方式で操作が続行されます。
(3)伝播、必須
現在トランザクションがある場合はトランザクションが追加され、現在のトランザクションがない場合は例外がスローされます。
(4)Propagation.REQUIRES_NEW
新しいトランザクションを再作成します。現在トランザクションがある場合は、現在のトランザクションを遅らせます。
(5)伝播。NOT_SUPPORTED
非トランザクションの方法で実行し、現在トランザクションがある場合は、現在のトランザクションを一時停止します。
(6)Propagation.NEVER
非トランザクション方式で実行します。トランザクションが現在存在する場合は、例外がスローされます。
(7)伝播。ネスト
存在しない場合は新しいトランザクションを作成し、存在する場合は現在のトランザクションに他のトランザクションをネストします。