什么是脏读?不可重复读?幻读?如何解决?

朋友最近面试美团,被面试官问到数据库的幻读问题,自己正好最近复习到这,做个笔记整理一下数据库的三大特征以及隔离级别。

一.先来回顾一下什么是事务,以及事务的四大特征

事务
事务是一个不可分割的数据库操作序列,也是数据库并发控制的基本单位,其执行的结果将使数据库从一种一致性状态变迁到另一种一致性状态。事务是逻辑上的一组操作,要么全部执行,要么全部不执行
事务简单的来说,就是要么全部执行,要么全部不执行,成为一个最小的原子单位。

事务的基本步骤:
1.开启事务START TRANSACTION 或者BEGIN
2.回滚事务(rollback)
3.提交事务COMMIT

事务的四大特征
1.原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用

2.一致性:执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的。

3.隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的

4.持久性:一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响

而我们今天的主题就是隔离性

二 .SQL标准定义的四个隔离级别

1 **Read Uncommitted(读取未提交)

什么是脏读?不可重复读?幻读?如何解决?相关推荐

  1. mysql 脏读 不可重复读 幻读_mysql事务隔离级别/脏读/不可重复读/幻读详解

    一.四种事务隔离级别 1.1read uncommitted 读未提交 即:事务A可以读取到事务B已修改但未提交的数据. 除非是文章阅读量,每次+1这种无关痛痒的场景,一般业务系统没有人会使用该事务隔 ...

  2. 脏读,不可重复读,幻读区别

    脏读 脏读又称无效数据读出.一个事务读取另外一个事务还没有提交的数据叫脏读. 例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因Roll ...

  3. mysql不可重复读和重复读_MySql隔离级别:RU / RC / RR / S + 脏读 / 不可重复读 / 幻读 / 可重复读...

    MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的. 数据库事务指的是一组数据操作,事务内的操作要么就是全部成功,要么就是全部失败,什么都不 ...

  4. 脏读,不可重复读,幻读区别和避免

    在了解脏读,不可重复度,幻读之前,首先要明白这三种情况的出现都是和数据库并发事务有关联的,如果所有的读写都按照队列的形式进行,就不会出现问题. 名词解析和解决方案 脏读 脏读又称无效数据读出(读出了脏 ...

  5. oracle 脏读,脏读 不可重复读 幻读

    序言 脏读.不可重复读.幻读这几个概念开始接触和学习的时候是在大学学习数据库系统的时候,那时候对这几个专业名词的理解停留在概念文字上,并没有真正使用过实践中,最近工作中涉及到这几个概念方面的知识,就来 ...

  6. Mysql如何实现隔离级别 - 可重复读和读提交 源码分析

    Abstract 本文会(1) 演示Mysql的两种隔离级别.  (2) 跟着mysql的源代码来看看它是怎么实现这两种隔离级别的. Mysql的隔离级别 当有多个事务并发执行时, 我们需要考虑他们之 ...

  7. MySQL可重复读和读已提交实现原理,深入理解MVCC。

    1.隔离级别 MySQL中隔离级别分为4种,提未交读.读已提交.可重复读.串行化.同时MySQL默认隔离级别为可重复读. 图片 查看MySQL隔离级别 SELECT @@tx_isolation 设置 ...

  8. 三分钟了解MVCC(InnoDB如何实现可重复读和读已提交)

    快照读和当前读 快照读 快照读是指读取数据时不是读取最新版本的数据,而是基于历史版本读取的一个快照信息(mysql读取undo log历史版本) , 快照读可以使普通的SELECT 读取数据时不用对表 ...

  9. mysql 可重复读和读提交的区别

    事务的四种隔离级别 未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据.Oracl ...

  10. 可重复读隔离级别如何解决脏读、不可重复读

    我们都知道可重复读隔离级别可以解决脏读.不可重复读.那么具体是如何解决的呢? 下面先通过实验来演示可重复读能够解决脏读.不可重复读问题,然后解释具体的原因. 环境搭建 1. 建立两个session连接 ...

最新文章

  1. 嵌入式C语言进行曲之要诀
  2. Linux下Bond技术怎样实现负载均衡的步骤
  3. python调用系统命令_Python如何调用外部系统命令
  4. html中绑定一个字段,四、在html中绑定数据
  5. github pages绑定freenom.com的域名
  6. Java 网络编程1
  7. mysql -- 索引的使用
  8. 小学教师计算机国培培训总结,小学教师国培培训心得体会
  9. 【Java例题】8.2 手工编写字符串统计的可视化程序
  10. jdbc mysql innodb 死锁 deadlock_Mysql InnoDB 数据更新/删除导致锁表
  11. 海康威视球机摄像头晚上补光灯闪烁问题
  12. DMS经销商管理系统解决方案
  13. Kd树实现K近邻算法
  14. 计算机五笔字型编码方法,计算机汉字输入坐标码编码方法
  15. Qt|表格代理的实现及使用代码qtableview和qtablewidget均适用
  16. 装饰器设计模式(模拟咖啡)
  17. DM368开发 -- 再论 UBL
  18. 项目管理(PMP)项目进度管理
  19. win10 软件安装出现错误代码 2502/2503
  20. bps、pps、fps

热门文章

  1. KNN算法及KNN的优化算法-加权KNN
  2. 阿里云后台部署全过程-6-HTTPS原理及配置
  3. 数学模型之整数规划(0-1规划)
  4. LeetCode 字符串(简单题)
  5. 重复行删除操作df.drop_duplicates和df.duplicated
  6. 服务器系统盘划分,服务器硬盘分区的划分c区系统区.doc
  7. Linux计划任务、周期性任务执行
  8. 局域网内通信和局域网与局域网间通信
  9. 线性代数笔记(1):向量空间与子空间
  10. AndroidStudio写的个人信息修改界面