1. 事务简介
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity):个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态,事务的中间状态不能被观察到的。
隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。隔离性又分为四个级别:读未提交(read uncommitted)、读已提交(read committed,解决脏读)、可重复读(repeatable read,解决虚读)、串行化(serializable,解决幻读)。
持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
任何事务机制在实现时,都应该考虑事务的ACID特性,包括:本地事务、分布式事务,及时不能都很好的满足,也要考虑支持到什么程度。
分布式事务典型场景
![](https://img2020.cnblogs.com/blog/1894435/202109/1894435-20210915181515042-520540607.png)
![](https://img2020.cnblogs.com/blog/1894435/202109/1894435-20210915181528497-1247234204.png)
![](https://img2020.cnblogs.com/blog/1894435/202109/1894435-20210915181539771-1761142098.png)
![](https://img2020.cnblogs.com/blog/1894435/202109/1894435-20210915181709186-66498142.png)
![](https://img2020.cnblogs.com/blog/1894435/202109/1894435-20210915181802742-138042526.png)
![](https://img2020.cnblogs.com/blog/1894435/202109/1894435-20210915181821245-176559998.png)
两阶段提交协议(2PC)存在的问题![](https://img2020.cnblogs.com/blog/1894435/202109/1894435-20210915182037639-602102903.png)
![](https://img2020.cnblogs.com/blog/1894435/202109/1894435-20210915182037639-602102903.png)