JAvaでトランザクションの独立性レベルを変更する方法

2618 ワード

トランザクションの特性:
アトミック(Atomicity)アトミックとは、トランザクションが分割できない作業単位であり、トランザクション内の操作が発生するか、発生しないかを意味します.(複数の文は成功するか、失敗します.)
コンシステンシ(Consistency)トランザクションの前後のデータの整合性は、一貫性を保つ必要があります.振替(減額、加算)独立性(Isolation)トランザクションの独立性とは、複数のユーザが同時にデータベースにアクセスする場合、1つのユーザのトランザクションが他のユーザのトランザクションに干渉されず、複数の同時トランザクション間のデータが互いに分離されることを意味する.永続性(Durability)永続性とは、トランザクションがコミットまたはロールバックされると、データベース内のデータの変更が永続的であり、次にデータベースに障害が発生しても影響を与えるべきではないトランザクションが終了することを意味します.
同時アクセスの問題(独立性を考慮しない):
1.ダーティリード:Aトランザクションは、Bトランザクションがコミットされていないか、コミットされているデータを読み込みます.
2.繰り返し不可:Aトランザクションは、Bトランザクションがコミットしたデータを読み込みます.Aトランザクションが複数回にわたってクエリされたデータが一致しない.
3.虚読/幻読:Aトランザクションは、Bトランザクションがコミットしたデータを読み込む.Aトランザクションが複数回にわたってクエリされたデータが一致しない.このようなケースは珍しく、1万回操作しても1回会えるとは限らない.
 
トランザクションの独立性レベル:
 
Java API、トランザクションの独立性レベルは大きく4つに分けられます.インタフェース接続のsetTransactionIsolationメソッドでは、トランザクションの独立性レベルを設定できます.
void setTransactionIsolation(int level)
                             throws SQLException

これをConnectionオブジェクトのトランザクション独立性レベルは、指定されたレベルに変更されます.可能なトランザクション独立性レベルはConnectionインタフェースで定義された定数.
注意:このメソッドがトランザクション中に呼び出された場合、結果はインプリメンテーションによって定義されます.
 
パラメータ:level-以下Connection定数の1つ:Connection.TRANSACTION_READ_UNCOMMITTEDConnection.TRANSACTION_READ_COMMITTEDConnection.TRANSACTION_REPEATABLE_READまたはConnection.TRANSACTION_SERIALIZABLE .(注意、使用不可Connection.TRANSACTION_NONEは、サポートされていないトランザクションを指定しているためです.)
放出:SQLException-データベース・アクセス・エラーが発生した場合、閉じた接続でこのメソッドが呼び出されます.または、指定されたパラメータがConnection定数の1つ.
詳細は次のとおりです.
まず、データベースで独自のデータベースの独立性レベルを確認します.
show variables like '%isolation%';
 
select @@tx_isolation;

 
void setTransactionIsolation(int level),level      ,1,2,4,8;
mysql :4
oracle :2
Connection.TRANSACTION_READ_UNCOMMITTED :level=1, , , , / 。 Connection.TRANSACTION_READ_COMMITTED: level=2, , / 。  Connection.TRANSACTION_REPEATABLE_READ:level=4、虚読/幻読が現れるが、残念ながら万分の1の確率で、私が操作したとき、一度も出会ったことがなくて、気まずい.Connection.TRANSACTION_SERIALIZABLE :  level=8, , , 。
 
一般的に使用する場合は、Connetion接続オブジェクトに基づいてパラメータを設定します.
       .setTransactionIsolation(  );
:1,2,4,8