トランザクションとは何ですか
逻辑上的一组操作,组成这个操作的各个逻辑单元要么一起成功,要么一起失败。
2事務の4つの特徴
1. 原子性(Atomicity)
操作的不可拆分,事务中的所有操作,要么一起执行,要么一起不执行。
2. 一致性(Consistency)
所有数据都满足业务规则的一致状态:事务开始之前数据是正确的,事务结束之后数据也是正确的。如果事务执行的过程中,有几个操作失败了,则所有操作都必须撤销---回滚。
3. 隔离性(Isolation)
多个事务在并发执行过程中不能相互干扰。
4. 持久性(Durability)
事务执行结束后,对数据的修改应该永久保存下来,不会因系统错误或其他意外而受到影响。通常情况下,应该写入到持久化容器中。
3つのローカル業務は何ですか
事务只在本工程内有效(不能跨工程,后面会讲分布式事务),本地事务依赖于数据库事务。
四つの分離レベル
脏读:一个事务读取的另一个事务未提交的数据。
不可重复读:一个事务读取到另一个事务已提交的数据,单条记录前后不匹配。
幻读(虚读):一个事务读取到另一个事务已提交的数据,多读到几条记录。
非反復可能読み取りとファントムが区別読み: 非反復可能読み取りが矛盾読む前と後のデータ内容を、一貫性のないデータは、ファントム読み取りの前と後に読み出します。
- 読書を解決する問題:データベースレベルで設定されたトランザクション分離レベル
分離レベル | ダーティー読み取り | またとないです | マジック読書(ダミーリード) |
---|---|---|---|
非コミット読み取り | それはあります | それはあります | それはあります |
READ COMMITTED | ノー | それはあります | それはあります |
反復可能読み取り | ノー | ノー | それはあります |
連載 | ノー | ノー | ノー |
4.1分離レベルを変更するのMySQL
查看全局事务隔离级别:SELECT @@global.tx_isolation
设置全局事务隔离级别:set global transaction isolation level read committed;
查看当前会话事务隔离级别:SELECT @@tx_isolation
设置当前会话事务隔离级别:set session transaction isolation level read committed;
查看mysql默认自动提交状态:select @@autocommit
设置mysql默认自动提交状态:set autocommit = 0;【不自动提交】
开启一个事务:start transaction;
提交事务:commit
回滚事务: rollback
在事务中创建一个保存点:savepoint tx1
回滚到保存点:rollback to tx1
5つのトランザクションの伝播
事务之间的相互调用,一个事务出错回滚,其他事务需不需要回滚,就取决于传播行为级别的设置。
通信行動の5.1 7種類
レベル | 効果 |
---|---|
必須 | 現在のトランザクションをサポートし、そうでない場合は、新しいものを作成します |
SUPPORTS | 現在のトランザクションをサポートしていますし、そうでない場合は、トランザクションを使用しないでください |
MANDATORY | ない場合は、例外をスローし、現在のトランザクションをサポートしています |
REQUIRES_NEW | トランザクションが存在するがある場合は、現在のトランザクションを中断し、新しいトランザクションを作成します |
サポートされていません | 存在しているトランザクションがある場合、非トランザクションの方法で実行すると、現在のトランザクションを中断 |
決して | トランザクションがある場合、非トランザクションの方法で実行すると、例外をスロー |
NESTED | 現在のトランザクションが存在する場合は、ネストされたトランザクションの実行(ネストされたトランザクション) |
NESTEDは
技術セーブポイントJDBC3.0に頼って
例えば:注文を削除するには、ユーザーを削除します。注文を削除した後、セーブポイント、削除ユーザを設定します。削除注文と同じトランザクション内の削除ユーザーは、トランザクションがセーブポイントをロールバックされ、ユーザーが失敗した削除ビューは、ユーザーがコミットまたはロールバックを制御します。:2種類の7つの最も一般的なトランザクション伝播メカニズム
REQUIRED:トランザクションが成功か失敗のどちらか。
REQUIRES_NEW:二つの異なる事項、互いの間には関係がありません。失敗したトランザクションは別のトランザクションには影響しません。
シックス・ロールバック戦略
の場合は@Transactionalデフォルトのロールバックの戦略:
- 実行時例外:なし異常な被験者は、何の義務のtry-catchが存在しない、ロールバックされます。たとえば、次のようにArrayOutOfIndex、OutOfMemoryを、NullPointException
- 異常コンパイル:未確認の例外に対処しなければならない、どちらかロールバックされていない、キャッチを試みるか、スローされます。たとえば、次のようにFileNotFoundException
ロールバックの戦略を指定します。
- rollbackFor:指定された例外は、ロールバックする必要があります
- noRollbackFor:指定されていない例外が発生したロールバック
セブントランザクションをタイムアウトしました
设置timeout,事务运行超时就抛出异常
八の読取り専用トランザクション
readOnly=true事务,则代表该方法只能查询,不能增删改。readOnly默认为false