专栏首页微观技术面试中数据库事务的几个关键点

面试中数据库事务的几个关键点

事务特性

1、原子性(Atomicity)

事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

2、一致性(Consistency)

事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

3、隔离性(Isolation)

同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

4、持久性(Durability)

事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

并发问题

1. 更新丢失

两个事务同时操作相同数据,后提交的事务会覆盖先提交的事务处理结果,更新丢失通过乐观锁就可以解决。

2、脏读

事务A读取到了事务B已经修改但尚未提交的数据,然后B回滚操作,那么A读取到的数据是脏数据

3、不可重复读

事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

4、幻读

事务A读取到了事务B提交的新增数据。系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

隔离级别

1. 读未提交

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。

读取未提交的数据,则会发生赃读。

2. 读已提交

一个事务多次读取的过程中,另一个事务可能对同一条数据做修改并提交,导致前一个事务多次读取到的数据不一致,则会发生不可重复读

一个事务只能看见已经提交事务所做的改变。这是大多数数据库系统的默认隔离级别,但非MySql。

3. 可重复读

确保同一事务的多个实例在并发读取数据时,会看到同样的数据行,并且多次读结果永远是第一次读取的结果(快照版本)。此级别依然会发生幻读,这是MySql的默认隔离级别

4. 可串行化

通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。

本文分享自微信公众号 - 微观技术(weiguanjishu),作者:TomGE

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何解决分布式事务

    随着分布式架构理念提出,软件系统架构开始迈入一个新时代。一个臃肿的应用会拆分出若干个微服务中心,按业务域维度划分系统边界,大家各司其职,在自己负责的领域深耕细作...

    用户7676729
  • Stream 流解读

    java.util.Stream 可以对元素列表进行一次或多次操作。Stream操作可以是中间值也可以是最终结果。最后的操作返回的是某种类型结果,而中间操作返回...

    用户7676729
  • 借助SPI 解决复杂业务扩展问题

    首先我们了解下何为SPI,SPI全称:Service Provider Interface,由一方提供接口规范,另一方负责具体实现。其理念跟软件设计模式中的策略...

    用户7676729
  • 5 分钟读懂 MySQL 四种隔离级别间的区别

    事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要...

    iMike
  • MySQL 的 4 种隔离级别,你了解么?

    事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要...

    一个优秀的废人
  • 面试必问的 Mysql 四种隔离级别,看完吊打面试官

    原文链接:https://www.jianshu.com/p/8d735db9c2c0

    好好学java
  • 面试问烂的 MySQL 四种隔离级别,看完吊打面试官!

    事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要...

    良月柒
  • 面试问烂的 MySQL 四种隔离级别,看完吊打面试官!

    事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要...

    Java技术栈
  • 数据库事务详解

    java404
  • 如何利用事务消息实现分布式事务?

    一说起事务,容易联想到数据库。我们日常使用事务的场景,绝大部分都是在操作数据库的时候。像 MySQL、Oracle这些主流的关系型数据库,也都提供了完整的事务实...

    王小明_HIT

扫码关注云+社区

领取腾讯云代金券