数据库事务(Transaction)

       为了保护数据库数据的安全,目前开发中基本都会使用事务来对数据做管理。为什么要用事务呢?

       假设一个简单支付的业务场景,客户购买商品,需要向商家付钱,付钱成功后,商家收到货款,然后发货。数据库中客户的账户需要先减去消费金额,然后商家的账户增加商品销售额。如果商家收钱时出现异常,没有收到货款,不会发货;但此时客户已经付款完成,已经减去消费金额,此时就会出现问题,客户花了钱没有买到东西。为了维护数据的一致性,就引入事务的概念,使用事务对数据进行管理。

       事务(Transaction),是作为整个逻辑工作单元执行的一系列操作,要么一起完成,要么一起失败。

       事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。

        事务的特性:事务具有ACID(原子性、一致性、隔离性和持久性)特性。

        1、原子性(Atomicity)

             ①定义:原子性是指事务是不可再分的最小工作单元,整个事务中的操作要么全部成功,要么全部失败。所有的操作按照某种业务逻辑,达到共同的目的,如果成功,则数据库中所有相关表记录都要修改,如果失败就会rollback,不会对数据库产生影响。

             ②示例:例如客户购物付款,如果商家没有收到钱,客户的钱也不应该减少,客户的付款与商家的收款应该同步进行,要么都成功,要么都失败。

        2、一致性(Consistency)

              ①定义:一致性是指事务结束后,数据必须从一个一致性状态达到另一个一致性状态。事务的操作不能影响数据及业务上的一致性。

              ②示例:例如还是客户购物付款,不管买了几次,客户的钱加上商家的钱的总额与最初购买之前的资金总额一致,总资金不能增加或减少。

        3、隔离性(Isolation)

              ①定义:隔离性是指事务之间彼此隔离,互不影响。当前事务操作的数据不能受到其他事务影响,要么获取其他事务开始前的数据,要么是其他事务完成后的数据。

              ②示例:依据以客户付款为例,假如同时有两个客户同时付款产生A和B两个事务,这是两个不同的事务,假如A事务先开始,商家收钱后资金增加,此时事务B获取商家的资金,但是事务A出现异常,事务回滚,但是事务B获取到的商家资金却包含了事务A重的资金,此时继续进行事务B就会出现错误。因此商家收款必须一个事务一个事务进行,以防获取到事务中间数据,保持事务的隔离性,维护数据安全。

        4、持久性(Durability)

             ①定义:持久性时指事务对数据库的更新是持久的,数据库重的数据是永久的。

             ②示例:依据以客户付款为例,假如客户付款成功,该事务完成,则数据库中客户与商家的资金都会永久性的修改,即使出现断网停电等等情况,数据不会修改。

猜你喜欢

转载自blog.csdn.net/u011861874/article/details/81536625