4つの分離レベルMySQLのトランザクション

取引の基本的な要素:

  原子性(アトミック):中間エラーが発生した場合、トランザクションの開始前に、トランザクションの開始後にすべての操作、どちらかのすべてが正常に実行されたが、トランザクションは状態にロールバックされます。

  一貫性(一貫性):トランザクションの開始後に、データベースの整合性制約は、例えば、破損していない:. B、額の控除への転送、Bが不足して受信しませんでした

  分離(隔離):同じ時間、同じデータのための唯一のトランザクション要求は、異なるトランザクション間の相互干渉がありません。

  永続性(耐久性):トランザクションの完了後、トランザクションがデータベースに対するすべての更新がデータベースに保存され、ロールバックすることはできません。

トランザクションの同時実行の問題

  ダーティ読み取り:トランザクショントランザクションBは、トランザクションがトランザクションB Aはデータが汚れて読みロールバックされ、更新されたデータを読み込み、

  またとない読み取り:トランザクションは、同じデータを複数回読み込むトランザクション中に数回B取引、データおよび複数の更新、同じデータで結果を繰り返し読んでトランザクションA、一貫性のない結果を提出します

  マジック読書:ABCDグレードの特定の画分からすべてのデータベース変更のためのシステム管理者の生徒の成績は、元の管理システムは、データはしかし、一晩変更があることがわかっていない特定のスコアに、元の後に変更Bの学生管理システムを追加します。同じ幻覚。

要約:

  改変された非反復リード重量は、条件を満たすために取らロック溶液を行。ファントムは、溶液ロックテーブルを挿入し、重量を削除する読み取ります

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

トランザクション分離レベル ダーティー読み取り 非反復可能読み取り マジック読書
READ UNCOMMITTED(読み取りuncommit) それはあります それはあります それはあります
非反復可能読み取り(読み取りコミット) ノー それはあります それはあります
反復可能読み取り(反復可能読み取り) ノー ノー それはあります
シリアライズ(直列化) ノー ノー ノー

MySQLのデフォルトのトランザクション分離レベル:反復可能読み取り(reeatable-読みます)

春のトランザクション管理で

  トランザクションの抽象化

  一貫性のあるトランザクションモデルを提供します(JDBC /休止状態/ MyBatisの/データソース/ JTA)

  

  トランズアクションインターフェース

  PlatformTransactionManager

      • DataSourceTransactionManager
      • HibernateTransactionManager
      • JtaTransactionManager

  トランザクション関連メソッド

   コミット(TransactionStatus ステータスが スロー TransactionExceptionを。

   空 ロールバック(TransactionStatusの状態は)  スロー  TransactionExceptionを。

  TransactionStatus getTransaction(@Nullable TransactionDefinitionの定義はスロー  TransactionExceptionを。

 

  トランザクション関連の定義

   TransactionDefinition 

     属性:

     伝播(伝搬モード)

     分離(アイソレーション)

     タイムアウト

        read-onlyステータス(trueまたはfalse)    

   カスタムサービス: 

  // 其中 dataSource 框架会自动为我们注入
  @Bean(name = "MyTransaction")
  public PlatformTransactionManager txManager(@Qualifier("MyDataSource") DataSource dataSource) {
   return new DataSourceTransactionManager(dataSource);
  }

 

  传播特性

传播性 描述
PROPAGATION_required 0 当前有事务就用, 没有事务就新建一个事务(默认)
PROPAGATION_supports  1 事务可有可无,不是必须的
PROPAGATION_mandatory   2 当前一定要有事务,不然就抛出异常    
PROPAGATION_REQUIRED_NEW   3 无论是否有事务,都创建一个新事务    
PROPAGEATION_NOT_SUPPORTS 4
不支持事务,按照非事务方式进行
PROPAGEATION_NAVER   5
不支持事务,如果有事务则抛出异常
PROPAGEATION_NESTED 6 当前有事务就在当前事务内在起一个事务,内部事务不影响外部事务

 

 

 

 

 

 

 

 

事务隔离特性

隔离性 脏读 不可重复读取 幻读
ISOLATION_READ_UNCOMMITTED (未提交) 1
ISOLATION_READ_COMMITTED(不可重复读取) 2 ×
ISOLATION_REPEATABLE_READ(可重复读取) 3 × ×
ISOLATION_SERIAILZABLE(串行化) 4 × × ×

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/shar-wang/p/11615760.html