一. 数据库中事务的概述
数据库事务(Database Transaction)是是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务是数据库运行中的逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。也可以理解为用户定义的一个数据库操作序列,这些操作序列要么全部执行,要么都不执行,是一个不和分割的工作单位。在数据库中事务可以是一条SQL语句,也可以是多条SQL语句。
二. 数据库中事务的特性
- 原子性(Atomicity):原子性是指事务包含所有的操作要么都成功,要么都回滚,因此事务的操作成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
- 一致性(Consistency):一致性是指事务必须是数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。如有两个银行账户A和B,两个账户总共有6000,在这种情况下,无论账户A与B之间如何进行转账,两个账户的总额一直是6000,这就体现了数据库事务的一致性。
- 隔离性(Isolation):隔离性是当多个用户并发访问数据库同一个数据表时,数据库为每一个用户开启的事务,不能被其他事务所干扰,多个并发事务之间要相互隔离。要达到隔离性,对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就完成,要么在T1结束之后才开始,这样每个事务就感觉不到其他事务在并发的执行。
- 持久性(Durability):持久性是指一个事务一旦被提交了,那么对数据库中数据的改变是永久性的,即便是数据库系统遇到故障的情况下不会丢失提交事务的操作。例如:我们在使用JDBC 操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误!
三. 数据库事务实例讲解
事务场景:小三账户中有6000元,小舞账户中有8000元,这时小三与小舞在不同前提下相互转账。
1.不使用数据库事务的前提下小三转账10000元给小舞,此时小舞账户增加10000元,但是小三账户不足10000元,同时账户余额不可为负数,故此时的账户数据为:小三账户为6000元,小舞账户18000元。
2.使用数据库事务的前提下小舞转账1000元给小三,此时两个账户的操作将在同一个事务中,故此时的账户数据为:小三账户为7000元,小舞账户为17000元。
3.使用数据库事务的前提下小舞转账36000元给小三,同时小三转账600元给小舞,由于小舞账户中不足36000元,故此次转账操作不成功,操作失败导致事务回滚,数据库返回到事务运行前有效的状态,即此时的账户数据为:小三账户为7000元,小舞账户为17000元。
来源:CSDN
作者:calm_encode
链接:https://blog.csdn.net/calm_encode/article/details/104064861