事务管理(个人理解)
事务的概念以及其特性:概念-单个逻辑工作单元执行的一系列操作,要么都执行,要么都不执行。
特性(ACID):原子性,事务的操作要么都执行,要么都不执行,作为一个整体;
一致性,事务开始之前到结束之后,数据库的完整性约束不会被破坏;(有空可以去详细了解)
隔离性,并发事务之间互相影响的程度,比如一个事务会不会读取到另一个未提交的事务修改的数据
持久性,在事务完成之后提交修改的数据会一直保持在数据库之中,不会被回滚。
出现读的问题(两事务间):脏读(select),不可重复读(update),幻读(insert);---------------------括号里的单词是对其概念的摘要
隔离级别:read uncommited 读未提交 上面三个问题都不能解决
read commited 可解决脏读问题
repeataable_able 可重复读 -----解决脏读,不可重复读
serializable 串行化-------三者都解决了
spring 的事务管理
在spring中怎么实现事务管理呢。设计到几个重要的类:platformTransactionMannger(顶层接口),TransactionDefition,TransactionStatus.(后面两个类继承或实现了顶层接口)
一、platformTransactionMannger(事物管理平台)是spring框架给封装了JDBC的框架(IBatis,Hibernate等)提供的接口,IBatis和Hibernate通过实现此接口,进而去实现spring事物管理。
platformTransactionMannger<------AbstractPlatformTransactionMannger才是真正提供JDBC封装框架的接口。IBatis对应的是:DataSourceTransactionMannger;Hibernate对应的是 HibernateTransactionMannger;还有JtaTransactionMannger,JpaTransactionMannger(分布式事务)不怎么了解(后期学习)。
二、TransactionDefition(事物定义信息):此类主要包含隔离级别,传播行为(常见)(7种),超时信息,是否只读(常见)。
传播行为---七种(A方法嵌套在B方法内):propagtion-requried :若A方法有事务,则B就使用A的事务。若没有则创建一个事务。
propagtion-support: B有事务则以事务的模式执行,若B没有事务,则非事务执行。
propagtion-mandatory:支持当前事务,若没有,则报异常。
propagtion-requries-new: 新建事务,如果A存在事务,把A事务挂起。
propagtion-not-support: 以非事务的形式执行,若有事务,则把事务挂起;
propagtion-nerve:以非事务方式执行,如果当前存在事务,则抛出异常.
propagtion-nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
三、TransactionStatus:事务状态-----用于记录事物管理中状态的对象。