本人结合自己对技术的理解,努力以通俗易懂的内容帮助大家了解技术的基本原理,内容仅供参考,不对或不完善的地方请大家指教,感谢关注!
一、事务概念的引入
当今,信息化技术非常发达的时代,我们通过手机上的银行APP软件就可以完成转账业务,比如,张三可以在APP上将100元从自己的账户转给李四的账户,在这个转账过程中银行的信息系统发生了3阶段的工作。
如上图所示,张三在银行APP软件填写转账的相关信息并提交后,APP就会通过Internet网络向银行的交易服务系统提交“向李四银行账户转账100元的申请”,当银行交易服务系统接收到这条转账请求信息后,会先对这条申请信息进行解析并生成一套数据库系统能执行的两条指令并打包发给银行内部的数据库系统。
- 第1条指令: “从张三银行账户减100元”
- 第2条指令: “给李四银行账户加100元”
银行的数据库系统存储了银行所有账户的储蓄信息,当接到这两条指令后,就会在“账户信息表”中进行账户储蓄信息的变更操作,如下图所示:
如果大家已经看明白上面内容,那么接下来就开始抛出本文要讲的“数据库事务”的概念了,通俗讲,数据库事务就是数据库系统为完成某一个业务逻辑工作,进行的一系列的对数据库的操作,上文提到的张三向李四账户转100元就是一个业务逻辑工作,在这个业务逻辑中会对数据库执行两项操作,第1项操作就是在银行数据库中,从张三的账户储蓄扣除100元,第2项就是向李四账户储蓄增加100元。
但是有个可能问题,如果数据库系统在做完对张三的账户扣钱操作之后,数据库系统突然出现故障无法继续工作,那么就会出现“张三账户的钱扣掉,但李四账户没有加钱”的问题,整个银行储蓄账户的数据库就会凭空蒸发100元的信息,如果出现此类问题,那么银行系统就是完全不可信任的,谁也不想平白无故的少钱呀!
为了保障数据库系统不会出现以上的问题,数据库事务必须要从技术上满足“原子性”,顾名思忆,原子就是无可再分的最小单元,该原则就是约束数据库事务在执行的过程中从技术上做到“要么该事务中所有操作都执行完成,要么就全不执行,不能出现执行一部分操作的情况”,当事务满足了该原则后就不会出现上文提到的转账少100元的问题。
以上通过一个简单的示例为大家引入了一个数据库事务概念,并解释了“原子性”事务原则,为了保障数据库事务能够准确、一致的执行,就必须要遵守国际标准的ACID原则,下一章节就会给大家介绍这个原则。
#扩展性了解