1.事务的概念
事务值得是逻辑上的一组操作,这组操作要么全部成功,要么全部失败.
2.具体实例
1.场景-银行转账
一个转账过程如果A给B转账期间,银行系统发生故障,就要保证A,B两者的财产不能出现任何损失.
所以转账的操作就要添加到事务中进行,必须一起成功,或者一起失败.
具体点就是,要么A给B成功转账,A少了3000元,B多了3000元,要么A没有给B转账成功,A没少一分钱,B没多一分钱.
2.事务的特性
总的来讲分为4类特性
原子性
一致性
隔离性
持久性
1.原子性
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生.
具体就是上面的例子.
2.一致性
一致性指事务前后数据的完整性必须保持一致.
实例:就是说A和B转账操作完成之前和之后,A,B两者的存款之和,没有任何变化.
3.隔离性
隔离性指的是指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰.多个并发的事务之间的数据要相互隔离.
实例:
A正在被一个事务进行更新操作,另外一个事务也进行对A对象的更新操作,这样就导致第一个事务对A的修改,被第二个事务对A的修改给覆盖,修改记录被覆盖掉了,为了避免这种情况,所以事务执行期间,必须要有隔离性.
4.持久性
持久性是指一个事务一旦被提交,他对数据库中的修改就是永久性的
,即使数据库发生故障也不对其出现任何影响.
3.Spring中的事务管理
Spring事务管理主要有三个接口
1. platfromTransactionManager
2. TransactionDefinition
3. TransactionStatus
1.platfromTransactionManager
Spring为不同的持久化框架提供了不同的PlatfromTransactionManager接口实现
2.TransactionDefinition
事务定义信息(隔离级别,传播,超时,只读)
可预见的安全性问题包括:脏读,幻读,不可重复读
1.脏读
一个事务读取了另外一个事务改写但没有提交的数据,如果这些数据被回滚,则读到的数据是无效的.
2.不可重复读
在同一事务中,多次读取同一数据返回的结果有所不同.
3.幻读
一个事物读取了几行记录之后,另一个事务插入一些记录,幻读就会产生.
再后来的查询中,第一个事务就会发现有些原来没有的记录,
隔离级别:读未提交,读已提交,可重复读,可串行化.
1.隔离级别的划分(安全等级升序)
2.事务的传播行为
主要用来解决服务器端的SERVICE&&DAO的一些问题.
图示:
网友评论