开发中又遇到了事务相关问题,就乘着这次,重新整理下事务相关
一、什么是事务
首先大家都知道sql吧,我的理解是:事务就是一组对sql语句的操作的集合。
二、事务的四大特性
这组sql语句具备 同时执行成功和同时执行失败的特性。把这一特性细分,就是事务的四大特性 ——> ACID
-
A【Atomicity】 :原子性,一个事务是一个整体,他们同时被执行,或者同时不执行,如果执行到一半出现错误,会有相应的措施解决(后文会提)
-
C【Consistency】 : 一致性,事务在事务执行之前和事务执行之后的完整性不变,即事务的执行使数据库从一种正确状态变为另一种正确状态
-
I【Isolation】 : 隔离性,数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性保证了事务在未执行完本次操作之前,其他事务看不到该事务对数据库的改变
-
D【Durability】 : 持久性,事务执行结束后,对数据库的改变是永久且不可逆的
三、事务的隔离级别
这里分为两部分 【并发下,事务会产生的问题】+ 【事务的隔离级别】
前面我们说到了事务四大特性之一的 隔离性,它的特点最明显,有并发。
在并发环境下会出现的问题如下:放链接了
这里,默认的隔离级别 ——> MySQL :可重复读REPEATABLE-READ,Oracle :读已提交READ COMMITTED
四、事务的传播机制
五、事务类型
- 数据库事务类型有本地事务和分布式事务
- Java事务类型有JDBC事务和JTA事务
- spring事务是对JDBC事务的封装,包含声明式事务和编程式事务
https://www.cnblogs.com/xiaolang8762400/p/7407161.html
https://www.cnblogs.com/drizzlewithwind/p/5711653.html
在这里介绍spring事务的声明式事务
它有两种:一种xml文件注入,一种使用注解
-
- 注解 : @Transactional + @EnableTransactionManager
五、事务失效
为什么失效?事务是AOP动态代理实现的,回答这个问题也就是回答为什么动态代理失效
标签:事务,隔离,数据库,www,并发,执行 From: https://www.cnblogs.com/psuitj/p/17751274.html