取引の基本的な要素:
原子性(アトミック):中間エラーが発生した場合、トランザクションの開始前に、トランザクションの開始後にすべての操作、どちらかのすべてが正常に実行されたが、トランザクションは状態にロールバックされます。
一貫性(一貫性):トランザクションの開始後に、データベースの整合性制約は、例えば、破損していない:. 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 | × | × | × |