在理解事务之前,我们要先了解事务的基本作用
比如在生活中有这样一个场景————取钱,每个人应该都干过的事
在ATM机上取钱,1.输入密码————2.输入金额————3.银行扣钱————4.ATM出钱
以上几个步骤中,3和4就是必须是一个事务,因为它们之间,要么都完成,要么都不完成
事务其实就是用来解决这种类似的问题
想象一理,如果第3步成功了,第4步失败(报错)了,这将会导致非常严重的后果,对于普通人而言,钱被扣了,但ATM机没出钱,肯定会发飙的吧。哈哈
所以第3步和第4步,必须要全部被执行完成,这样才能保证最后数据的一致性。
对应到业务开发过程中,第3步和第4步,我们把它认为是一个执行单元,但在代码里面它是一条条的代码,所以必须要有一种机制能够保证它们要么全部执行成功,要么全部执行失败。
这就是事务的基本应用。
Spring事务是建立在持久层的基础之上的,要理解Spring事务,就必须要先了解事务的相关特性
事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。
1.关闭自动提交功能(SET COMMIT = TRUE)
2.开启事务
3.编写SQL语句
4.提交事务
5.打开自动提交功能(SET COMMIT = FALSE)
Mysql实现
原文:https://www.cnblogs.com/yanchuanbin/p/14731530.html