MySQL学习笔记(二):InnoDB的事务管理(1)

分类:
数据库
标签:
学习笔记
MySQL
作者:
何鑫
创作时间:
2019/06/26 10:42:40

摘要:InnoDB的事务管理

在MySQL中,Innodb是支持事务的存储引擎,我们先了解一下事务的概念。

事务的概念

事务是逻辑上的中一组操作,这些操作要么同时成功,要么同时失败。

事务的特性(ACID)

  ● 原子性(Atomicity):事务是原子的,不可分割,事务中操作要么同时成功,要么同时失败。

  ● 一致性(Consistency):事务总是从一个一致性状态到另一个一致性状态。

  ● 隔离性(Isolation):一个事务不应受其他事务影响。

  ● 持久性(Durability):事务一旦提交,就应该持久化到数据库,即使数据库发生故障也不应对其产生影响。

用实例来理解事务

我们用最经典的银行转账实例来理解事务。

假如A从账户中转200元到B账户,我们先分解一下步骤,要网站这个转账,我们需要:

          1. 检查A中是否有足够的钱(大于等于200元);

          2. 扣除A账户200元;

          3. B账户增加200元;

          4. 转账完成;

我们先设想如果没有事务,一旦出错会怎样。如果在第三步中由于某些原因导致增加钱的操作失败,那么久意味着A账户200元不翼而飞了,对于用户来说这显然是不可接受的。

如果加上事务控制,就不会有这样的问题,在事务中,一组操作要么同时成功,要么同时失败,也就是说,如果在步骤三出现错误,那么步骤二也应该无效(事务会进行回滚),最终A账户不会被扣钱,B账户也不会加钱,转账失败。

我们再来看一下这个实例里体现的事务特性,步骤三失败,步骤二也会失败,体现事务的原子性;转账无论成功还是失败,前后总金额不变,体现了事务的一致性;至于隔离性,这个会受数据库隔离级别的影响(后续会介绍);持久性体现在开启事务的情况下,如果所有步骤都成功完成,一旦该事务提交(未提交不会实际更改数据库),就会持久化到数据库,不受任何影响。

发表评论

温馨提示: 评论先审核后发布, 请勿发表不良言论

所有评论