数据库脏读、幻读以及不可重复读

小编 2026-06-18 阅读:161 评论:0
最近刷面经,刷到一些这样的面试题,就做一点笔记来加深自己的理解 1、数据库脏读 所谓的脏读顾名思义就是数据被污染了,当数据库存在多个用户时,A对数据进行了修改,但没有确认,但是这时候B对这个数...

最近刷面经,刷到一些这样的面试题,就做一点笔记来加深自己的理解
1、数据库脏读
所谓的脏读顾名思义就是数据被污染了,当数据库存在多个用户时,A对数据进行了修改,但没有确认,但是这时候B对这个数据进行查询,接着A对数据进行了回滚,那样B得到的数据就是一个错误的数据,举个贴近生活的例子,教务系统你的高数老师登记你的高数成绩看走眼了,就把小C的成绩看成你的成绩了,然后你就挂了,然后你查到了该成绩,然后就准备补考,然后老师复查的时候发现登记错误了,就改回来了,然后第二年你补考的时候发现补考名单里面没有你的名字。这就是脏读的原理
2、数据库的不可重复读
数据库不可重复读,所谓的不可重复读,我觉得名字有点歧义,更确切的就是产生了前后矛盾,不可重复读指的是在A查询数据,然后B事件在逻辑中改变了该数据,接着A再对该数据进行查询,出现了前后矛盾。按照上述例子说法就是,你在第一次查询成绩后,老师发现这次题出的太难了,然后给你的分数加了个权重(声明我没有在黑浙江高考),然后第二次你查询成绩你就彻底懵逼了。
3、数据库的幻读
幻读的重点也在于前后数据不对应,事务A首先根据条件索引得到若干数据,然后事务B改变了符合事务A搜索条件的数据,导致事务A再次搜索发现有数据数量不符合。幻读和不可重复读最大的区别在于是不是进行了搜索。也就是保研的时候本来只算必修课,然后我将自己的必修成绩加了起来,然后教务处一纸文件表示选修课也要算成绩,然后。。。
下面说一下解决方案:
脏读最容易解决,只要保证一个事务不会读到另一个并行事务已修改但未提交的数据就可以解决
不可重复读可以通过保证一个事务不会读到另一个并行事务读取但未提交的数据就可以解决
幻读比较麻烦一些必须通过保证事务串行执行

最后补一个事件隔离级别。
Serializable (串行化):最严格的级别,事务串行执行,资源消耗最大;

2、REPEATABLE READ(重复读) :保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但不能避免“幻读”,但是带来了更多的性能损失。

3、READ COMMITTED (提交读):大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”,但不能避免“幻读”和“不可重复读取”。该级别适用于大多数系统。

4、Read Uncommitted(未提交读) :事务中的修改,即使没有提交,其他事务也可以看得到,会导致“脏读”、“幻读”和“不可重复读取”。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表