浅谈MySQL数据库中的事务

        事务就是一组原子性的sql查询,或者说是一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或者其他原因无法执行,那么所有的语句就都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。

        事务是恢复和并发控制的基本单位。
        事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
        原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
        一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
        隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
        持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

        银行转账很好的体现了事务的必要性。例如一个银行的数据库有2张表:支票表(checking)表和储蓄(savings)表。现在要从用户Jane的支票账户转移200美元到他的储蓄账户,那么现在至少需要3个步骤才能完成该操作:
        1、检查支票账户的余额高于200美元;
        2、从支票账户余额中减去200美元;
        3、在储蓄账户余额中增加200美元。
        上述三个步骤的操作必须打包在一个事务中,任何一个步骤失败,则必须回滚所有的步骤。

        可以用start transaction语句开始一个事务,然后使用commit提交事务,将修改的数据持久保留,要么使用rollback撤销所有的修改。上述银行转账实例的sql语句如下:

   start transaction;
   select balance from checking where customer_id = 12344;
   update checking set balance = balance - 200 where customer_id = 12344;
   update savings set balance = balance + 200 where customer_id = 12344;
   commit;

        为了保障用户的财产安全,同时也为了银行的利益不受损失,系统必须通过严格的ACID测试,否则空谈事务的概念是不够的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值