事务:事务指的是逻辑上的一组操作,这组操作要么都成功,要么都失败。

Transaction事务的四大特性ACID
1.Atomicity原子性
事务的操作要么都成功,要么都不做,只要有一个失败,就会回滚。
  如A转账100给B:A转出100,B转入100,这两步要么一起完成,要么都不做。
2.Consistency一致性
事务的运行前后数据的完整性必须保持一致。
  如A有200,B有200,一共400,A转给B100后,总金额还是400。
3.Isolation隔离性
并发的事务之间不会相互影响,多个并发事务之间的数据要相互隔离(设置隔离级别)。
  如A转100给B:若事务未完成,B的账户是不会多100的。
4.Durability持久性
事务一旦提交,它所做的修改将永久的保存在数据库中,不会受其他方面的影响。

Spring中的事务管理介绍(高层抽象包括3个接口):

1.PlatformTransactionManager 事务管理器
2.TransactionDefinition 事务定义信息(隔离、传播、超时、只读)
3.TransactionStatus 事务具体运行状态

如果不考虑隔离性,会引发安全问题:
1.脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。
2.不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。
3.幻读:一个事务读取了几行记录后,另一个事务插入了几行数据,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。 隔离级别:
DEFAULT : 使用后端数据库默认的隔离级别(Spring中的选择项)
READ_UNCOMMITED : 允许你读取还未提交的改变了的数据。可能导致脏、幻、不可重复读。
READ_COMMITTED : 允许在并发事务已经提交后读取。可防止脏读,但幻读和不可重复读仍可发生。(Oracle默认隔离级别)
REPEATABLE_READ : 对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,但幻读仍可能发生。(MySQL默认隔离级别)
SERIALIZABLE : 完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。在所有隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的。 事务的传播行为:解决业务层之间的相互调用。同时调用业务层中不同类的方法
PROPAGATION_REQUIRED : 支持当前事务,如果不存在,就新建一个。
PROPAGATION_SUPPORTS : 支持当前事务,如果不存在,就不使用事务。
PROPAGATION_MANDATORY : 支持当前事务,如果不存在,抛出异常。
PROPAGATION_REQUIRES_NEW : 如果有事务存在,挂起当前事务,创建一个新的事务。
PROPAGATION_NOT_SUPPORTED : 以非事务方式运行,如果有事务存在,挂起当前事务。
PROPAGATION_NEVER : 以非事务方式运行,如果有事务存在,抛出异常。
PROPAGATION_NESTED : 如果当前事务存在,则嵌套事务执行。

最新文章

  1. jquery.min.map 404 (Not Found)出错的原因及解决办法
  2. winform中button的image属性无法更改
  3. 【转】UML类图几种关系的总结
  4. WPF Window 服务安装
  5. 安装MySQL总结
  6. qt qml中PropertyAnimation的几种使用方法
  7. C++ Primer 学习笔记_62_重载操作符与转换 --调用操作符和函数对象
  8. Eclipse安装git
  9. Unity 类似FingerGestures 的相机跟随功能
  10. [原创]手把手教你写网络爬虫(4):Scrapy入门
  11. gtk+2.0中GtkObject结构中没有klass成员的解决办法
  12. java基础语法(二)--单列模式
  13. vue的$nextTick使用总结,this.$refs为undefined的解决办法,element Ui的树形控件setCheckedKeys方法无法使用
  14. winform界面特效470多例
  15. [UE4]Spin Box,数字输入,可拖动
  16. 月球美容计划之最小生成树(MST)
  17. [django]cbv方式
  18. VMware Linux 下 Nginx 安装配置 (一)
  19. C++类中的访问权限问题
  20. [WinCE] Win CE 屏幕截图

热门文章

  1. ServletRegistrationBean的源码摘要
  2. tomcat错误The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
  3. Spring Boot 引入org.springframework.boot.SpringApplication出错
  4. mac charles抓安卓(小米)http包
  5. Android自定义控件之日历控件
  6. 怎样将PDF文件转换成Excel表格
  7. 如何用anysend发wirshark的报文
  8. Python中的引用传参
  9. 学习ActiveMQ(六):JMS消息的确认与重发机制
  10. python之dict