一组业务整体处理的行为叫一个事务。这一组的业务都能成功处理,我们就可以把这个事务提交来保存你已做的行为结果。但如果一组中有任何的差错出现的话,我们就认为这事务不成功,需要回滚来撤消之前的操作。举例:你去银行转账,转账我们有两步吧,从你账户中取出钱再往他账户中加钱。那这两步银行是必须要确保正确无误的进行的。要被看做成一个事务。其中任何一步出错就算是转账失败,但可能你这时是已经从你账户中扣了钱了,又没往他账户里加钱?怎么办算了?你不肯吧。所以银行会事务回滚,不保存你刚才的操作,即恢复到你没转账之前的状态。累啊
平时见到的数据库操作都是原子性的,也就是说单纯性的,要嘛插入,要嘛修改,要嘛删除。
事务就是一系列相关数据库操作的集合,因此,只有事务里的所有操作都正常完成才算一次事务提交,如果有一个操作不完成,数据库就恢复到操作前状态,这叫做回滚。
举个例子:
你要给老妈汇100元,一次完整的汇款操作就是一个事务。
简单列举下汇款的主要流程:
1:从你帐号拿出100元,相应的数据库操作就是---》减去100元从你的帐号
2:银行将100元存入老妈的帐号,相应的数据库操作就是----》修改老妈的帐号的余额
步骤1,2和一起算一次事务,它包括两次数据库的修改处理,因此,如果两则有一个出现异常(比如汇款时停电),则正常的银行系统不会将你的100元丢失,也不会将老妈帐户加100.
如果没有事务管理,减去100和加上100是两个单独的操作,这时候如果 把你帐户减去100元后,突然停电, 不仅老妈收不到钱,你的100元也没了。很可怕吧!还好只是100!有了事务管理呢,数据库系统发现这次事务出现了中断,就不会把你的钱扣除。
建议看看书!理解的更深入,如有问题,留言
举个例子,假如你人在A,现在要到D去,中间经过B,C两个地方,当你走到C时,由于其他原因没法继续到D时,回滚就可以回到最初状态A了,提交相当于确认下。拿银行转账来说,银行将操作看成事务,A转帐给B人民币100元,银行先从A账户扣100元,如果这时候由于网络或其他原因,B账户未增加100元,这时候等于交易没完成,就要回滚,如果这两A+100和B-100都成功了,才能提交,将这两个修改提交到数据库,之前的操作没有对修改数据库,只是在缓存中。
向数据库提交数据或修改数据,如果你觉得没有问题,就可以提交,如果其中有一个环节出错了,就可以设置回滚,可以根据判断进行回滚,不是非要出异常了才回滚,如何回滚如何提交要看你的业务逻辑。
比如:
你去银行转账,转账我们有两步吧,从你账户中取出钱再往他账户中加钱。那这两步银行是必须要确保正确无误的进行的。要被看做成一个事务。其中任何一步出错就算是转账失败,但可能你这时是已经从你账户中扣了钱了,又没往他账户里加钱,怎么办?银行会事务回滚,不保存你刚才的操作,即恢复到你没转账之前的状态。
事务的提交是指:事务里写的方法等完成并提交,回滚就是说事务中的方法出现了错误,没有返回正确的值,则整个事务都不提交。比方说事务里有两个方法a()、b()。如果a、b都成功则事务提交,反则如果有一个没有成功则两个方法都不提交!