Spring事务的四大特性
1.事务(Transaction)
事务一般是指数据库事务, 是基于关系型数据库(RDBMS)的企业应用的重要组成部分。在软件开发领域,事务扮演者十分重要的角色,用来确保应用程序数据的完整性和一致性。也就是要么完全执行,要么完全不执行。
事务允许我们将几个或一组操作组合成一个要么全部成功、要么全部失败的工作单元。如果事务中的所有操作都执行成功,那就是最终我们想要的正确的结果。但如果事务中的任何一个操作失败,那么事务中所有的操作都会被回滚,已经执行成功操作也会被完全还原,结果就跟操作之前一样。
很经典的例子就是银行转账操作, A转账给B500元, 如果A先转出去了500, 此时A的账户就少了500, 接下来就应该给B账户添加500元了, 但是很不巧此时程序出现了问题导致操作终止了, 这时候还没有给B账户加上500, 但是A却已经少了500元了, 这样就出现了问题. 所以就有了事务管理
事务管理的意义:保证数据操作的完整性。
而事务管理的四大特性就是ACID!
2.事务的ACID
事务的四个特性, 也就是ACID分别是: 原子性、一致性、隔离性 和 持久性
2.1.原子性(Atomicity)
事务的整个操作是一个整体,不可以分割,要么全部成功,要么全部失败。
例如: 上面的转账操作, A转出, B转入, 这虽然是两个操作, 但却应该是一个整体, 整体操作要么成功, 要么不成功(A也不会少那500元), 不能A转出了500, B却没有转入, 这就不是一个整体了.
2.2.一致性(Consistency)
事务必须保证数据库从一个一致性状态变到另一个一致性状态,一致性和原子性是密切相关的。
例如: 上面的转账操作, 账户A和B, 在操作之后, 应该要么都是转账前的状态(A没有转出500, B也没有收到500), 要么就都是转账后的状态(A转出了500, B转入了500), 不能A转出了500, B却没有转入500. 可以看出, 这里的一致性和原子性紧密结合的.
2.3.隔离性(Isolation)
一个事务的执行不能被其它事务干扰,即一个事务内部的操作及使用的数据对并发的其它事务是隔离的,并发执行的各个事务之间不能互相打扰。
例如: 上面的转账操作, 虽然A和B转账操作的那个时间段, 会有很多其他人也在转账(可能也会牵扯到A和B账户), 但是每个人的转账都是自己个事务中, 彼此之间不会影响
2.4.持久性(Durability)
持久性也称为永久性,指一个事务一旦提交,它对数据库中数据的改变就是永久性的,后面的其它操作和故障都不应该对其有任何影响。
例如: A和B的转账操作完成后(事务提交), 此时A就会少了这500, B也就多了500, 不会改变了(除非继续操作账户), 此时不管系统崩了还是银行断电, 账户里的钱都不会改变了