一、数据库事务概念

数据库事务,是指作为单个逻辑工作单元执行的一些列操作,要么都执行,要么都不执行

举个简单例子:小明给小黑转100元钱,能分为小明减去100元,小黑加上100元。但不能只执行其中的一步,要么都执行,要么都不执行。这就是事务。

二、事务的特性(ACID)【重点】

  • 原子性(Atomicity): 一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。

  • 一致性(Consistency): 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。比如:转钱前我们加起来一共200元,转完之后我们总和也要是100元。

  • 隔离性(Isolation): 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括未提交读(Read uncommitted)、提交读(read committed)、可重复读(repeatable read)和串行化(Serializable)。

  • 持久性(Durability): 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

三、并发事务带来哪些问题?(举例子)

在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对同一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题。

  • 脏读(Dirty read): 当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依据“脏数据”所做的操作可能是不正确的。

    例子:事务1查询 a 数据 a ,事务2对a数据进行修改操作 a‘ ,事务1再次查询a —>a’,事务2进行回滚操作a’--->a,事务1接下来所有操作都是错误的

  • 丢失修改(Lost to modify): 指在一个事务读取一个数据时,另外一个事务也访问了该数据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失,因此称为丢失修改。 例如:事务1读取某表中的数据A=20,事务2也读取A=20,事务1修改A=A-1,事务2也修改A=A-1,最终结果A=19,事务1的修改被丢失。

  • 不可重复读(Unrepeatableread): 指在一个事务内多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次读到的数据是不一样的情况,因此称为不可重复读。

    例子:事务1查询 a 数据 a ,事务2对a数据进行修改为 a‘ 提交 ,事务1查询a数据 —>a’,事务1的两次查询是不一样的

  • 幻读(Phantom read): 幻读与不可重复读类似。它发生在一个事务(T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读。

    例子:事务1查询 表a 所有数据条数n条 ,事务2对a表进行增加操作 提交,事务1再次查询n+1条,前后两次数据条数不一致

不可重复读和幻读区别:

不可重复读的重点是修改比如多次读取一条记录发现其中某些列的值被修改,幻读的重点在于新增或者删除比如多次读取一条记录发现记录增多或减少了。

四、事务隔离级别有哪些?MySQL的默认隔离级别是?

SQL 标准定义了四个隔离级别: 默认 REPEATABLE-READ(可重复读)

  • READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读

  • READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生

  • REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生

  • SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读

数据库事务(常被问的)相关推荐

  1. 数据库面试常问的一些基本概念

    1.超键.候选键.主键.外键 超键:在关系中能唯一标识元组的属性集称为关系模式的超键.一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键.超键包含候选键和主键. 候选键:是最小超键,即没 ...

  2. 直击美团“远程面试”现场,面试官竟反问:你真懂数据库事务吗?

    为什么要记录这次面试经历? 疫情形势仍然十分严峻,很多企业在招聘时会采取网络面试或是远程面试的方式来保证面试流程的顺利进行.马上就要迎来金三银四,希望你们同我一样,面试顺利,顺利拿下自己心仪的offe ...

  3. 面试中的最常被问到的两种锁

    文章目录 面试中的最常被问到的两种锁 **锁的分类** **乐观锁** **悲观锁** 面试中的最常被问到的两种锁 公众号后台领取更多 面试必看资料 面试中经常被问到的锁到底是哪两种锁呢?接下来我们就 ...

  4. 面试JAVA常被问到的问题(持续更新中)

    引言 有的面试会被问到有没有写博客,这时候我尴尬,不知道怎么回答,所以这篇文章仅仅是把我面试JAVA的遇到的问题记录下来而已,也算是我写博客迈出的第一步,起码,以后被问到:有没有写博客?我可以回答,我 ...

  5. 数据库事务的四个隔离级别浅析

    数据库事务的隔离级别有4个,由低到高依次为Read uncommitted (读未提交).Read committed(读提交).Repeatable read(可重复读) .Serializable ...

  6. Mysql数据库事务详解

    80年代中国人结婚四大件:手表.自行车.缝纫机.收音机(三转一响).要把事务娶回家需要四大件,所以事务很刻薄(ACID),四大件清单:原子性(Atom).一致性(Consistent).隔离性(Iso ...

  7. mysql当前时间减一分钟_MySQL数据库事务的机制【总结】

    php中文网最新课程 每日17点准时技术干货分享 这几天面试多次被问到了数据库事务机制.隔离级别.乐观锁悲观锁类的问题,之前对这些只能说有所了解,有些概念还停留在记忆层面,没有理解,所以回答的不好.后 ...

  8. datagrid只传入了一部分的数据 未显示全_软件开发面试之数据库事务篇

    软件开发面试之数据库事务篇 不少的小伙伴正在准备或是即将准备后端开发的岗位,对于这个岗位而言数据库是必问的一个知识点,而数据库的事务和数据库的隔离级别又是问到数据库时必问的重点.小编从年初开始也是不断 ...

  9. 并发事务正确性的准则 可串行化_从0到1理解数据库事务(上):并发问题与隔离级别...

    最近准备写一篇关于Spanner事务的分享,所以先分享一些基础知识,涉及ACID.隔离级别.MVCC.锁,由于太长,只好拆分成上下两篇: 上:并发问题与隔离级别 主要讲事务所要解决的问题.思路,先理解 ...

最新文章

  1. Windows Server vNext Technical Preview UI Build 9841
  2. eclipse 插件,直接打开文件路径
  3. rhel6.2 yum
  4. java 水印乱码,linux java程序加水印及中文乱码方案
  5. android 6.0编译环境,MacOS下编译Android6.0源代码
  6. FireEye 红队失窃工具大揭秘之:分析复现 Confluence路径穿越漏洞 (CVE-2019-3398)
  7. BSOD 又见BSOD。。。。
  8. 使用 Lightbox 2 和 JavaScript 构建出色的图片库
  9. Java内存解析 程序的执行过程
  10. JSON与JAVA数据的转换。JSONObject.fromObject()和JSONObject.toBean()
  11. IDEA如何导入项目
  12. 阿里云对象存储OSS简单使用
  13. 龙之谷手游服务器修改,龙之谷手游互通区一览 5月12日部分服务器数据互通公告...
  14. CUPS学习一:CUPS设计介绍。
  15. 计算机组装方案背景图,白色系主机的另外一种搭配:联力O11MINI装机作业参考...
  16. 基于嵌入式Linux的MP3播放器的设计与实现
  17. CSAPP实验1:Data Lab笔记
  18. 图像增强:opencv去除图片的高光
  19. java课程管理系统_基于JAVA学生课程管理系统.doc
  20. IO-Link工业总线型汽车撑杆装配线RFID写卡器CK-FR05-IO计算示例

热门文章

  1. 临时禁用clang-format
  2. 小米米兔机器人的发展史_小米米兔机器人评测:一个站在平衡车上的机器人
  3. 产品经理常用的数据指标(KPI)——用户
  4. rabbitMQ Shovel与Federation
  5. centos8怎么启动docker
  6. ZYNQ 高速接口系列(一) PCIe接口
  7. JavaScript day05
  8. 计算机当前的应用领域广泛,【单选题】计算机当前的应用领域非常广泛,但根据统计其应用最广泛的领域是 ______...
  9. 学习日志:关于.py文件双击打开出现闪退的情况
  10. WPF中Button中的MouseDown和MouseUp不触发问题解决方法