05.MySQL --- 事务

事务的ACID属性

  • 原子性 (Atomicity)

    原子性是指事务是一个不可分割的工作单位,要么全部提交,要么全部失败回滚,即要么成功,要么失败,不存在中间状态

  • 一致性 (Consistency)

    我的理解是数据一致性,举个例子就能明白,拿转账来说,假设用户A和用户B两者的钱加起来一共是500,那么不管A和B
    之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是500,这就是事务的一致性。

  • 隔离性 (Isolation)

    隔离性简单点说,就是解决脏读、不可重复读、幻读的问题的。

  • 持久性 (Durability)

    永久性是指一个事物一旦被提交,它对数据库中数据的改变是永久性的,接下来的其他操作和数据库故障不会对永久性数据产生影响

事务的状态

  • 活动的 (active)

    事务对应的数据库操作正在执行过程中,我们就说该事务处在活动状态

  • 部分提交的 (partially committed)

    当事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并没有刷到磁盘时,事务状态就是部分提交的状态

  • 失败的 (failed)

    当事务处在活动的或部分提交的状态时,可能遇到了某些错误而无法继续执行,此时事务状态就是失败的

  • 中止的 (aborted)

    当事务执行了一部分而变为失败的状态时,就要撤销失败事务对当前数据库造成的影响。我们把这个撤销的过程称为回滚。

    事务成功回滚时,我们就称事务处在中止的状态

  • 提交的 (committed)

    当一个处在部分提交的状态的事务,将修改过的数据都同步到磁盘后,我们就说事务处在了提交的状态。

在这里插入图片描述

事务并发问题 — 1.脏写

在这里插入图片描述

事务并发问题 — 2.脏读

在这里插入图片描述

事务并发问题 — 3.不可重复读

在这里插入图片描述

事务并发问题 — 4.幻读

在这里插入图片描述

事务并发问题 — 区分不可重复读和幻读

在这里插入图片描述

事务隔离级别 — 1.读未提交

  • READ UNCOMMITTED

    所有事务都可以看到其他未提交事务的执行结果,不能避免脏读、不可重复读、幻读

事务隔离级别 — 2.读已提交

  • READ COMMITTED

    一个事务只能看到已经提交事务所做的改变,这是大多数数据库系统的默认隔离级别(但不是MySQL的),不能避免不可重复读和幻读

事务隔离级别 — 3.可重复读

  • REPEATABLE READ

    事务A在读到一条数据后,此时事务B将该条数据修改并提交了,此时事务A再读取该数据,读到的还是原来的内容,不能避免幻读

事务隔离级别 — 4.可串行化

  • SERIALIZABLE

    确保事务可以从一个表中读取相同的行,但在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作

    所有的并发问题都可以避免,但性能十分低下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值