事务浅析

事务浅析

面试相关 事务浅析

事务特性

原子性(Atomicity): 事务包含的所有操作要么全部成功,要么全部失败回滚

一致性(Consistency): 事务必须使数据库从一个一致性状态变换到另一个一致性状态

隔离性(Isolation): 一个事务执行的过程中,不应该受到其他事务的干扰

持久性(Durability): 事务一旦结束,数据就持久到数据库

Spring事务传播机制

所谓事务传播机制,也就是事务在多个方法的调用中是如何传递的,是重新创建事务还是使用父方法的事务?父方法的回滚对子方法的事务是否有影响?这些都是可以通过事务传播机制来决定的

事务传播机制 特性
REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED) 支持当前事务,如果没有事务会创建一个新的事务(默认
SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS) 支持当前事务,如果没有事务的话以非事务方式执行
MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY) 支持当前事务,如果没有事务抛出异常
REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW) 创建一个新的事务并挂起当前事务,执行完新事务后继续执行挂起事务
NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED) 以非事务方式执行,如果当前存在事务则将当前事务挂起
NEVER(TransactionDefinition.PROPAGATION_NEVER) 以非事务方式进行,如果存在事务则抛出异常
NESTED(TransactionDefinition.PROPAGATION_NESTED) 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作

Spring事务隔离界别

事务隔离界别 特性
isolation_default 使用数据库默认的事务隔离级别(默认
isolation_read_uncommitted 允许读取尚未提交的修改,可能导致脏读、幻读和不可重复读
isolation_read_committed 允许从已经提交的事务读取,可防止脏读、但幻读,不可重复读仍然有可能发生
isolation_repeatable_read 对相同字段的多次读取的结果是一致的,除非数据被当前事务自生修改。可防止脏读和不可重复读,但幻读仍有可能发生
isolation_serializable 完全服从acid隔离原则,确保不发生脏读、不可重复读、和幻读,但执行效率最低

学习所得,资料、图片部分来源于网络,如有侵权,请联系本人删除。

才疏学浅,若有错误或不当之处,可批评指正,还请见谅!


 
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×