栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据库面试题-01:脏读、幻读、不可重复读是什么?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据库面试题-01:脏读、幻读、不可重复读是什么?

题目-01:脏读、幻读和不可重复读是什么?
来源:蚂蚁金服-社招-JAVA-二面

脏读:事务T1修改某一数据,并将其写回磁盘。事务T2读取同一数据后,T1由于某种原因被撤销。事务T1已经修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,也就是T2读到了脏数据。如下图所示:

注:事务T1首先将数据x由100修改为了90,而此时事务T2读取x,读到了90,但T1被撤销,又将数据回滚到原来的100,此时T2读到的数据就是错误的脏数据。

总结:事务 T2 读取了事务 BT1未提交的数据。


幻读:事务T2在执行读取操作,需要两次统计数据的总量,前一次查询数据总量后,此时事务T1执行了新增数据的操作并提交后,这个时候事务T1读取的数据总量和之前统计的不一样,就像产生了幻觉一样,平白无故的多了几条数据,称作幻读,如以下例子:

总结:事务 T2 读取了事务 T1 已提交的新增数据。


不可重复读:指事务T1读取数据X后,事务T2紧接着也想要读取数据X。而事务T1更新了数据X的值,此时事务T2读取的X值仍是原来的数据X的值,如果此时T2再次读取X,则两次读取到的值不一致。如下图所示:

注:在时间t2,事务T2读取到的x的值是100,而如果在t6时刻重复读取,此时则会变成70。

总结:事务 T2 读取了事务 T1 已提交的更改过(修改或删除)数据。


以上三种对比:

脏读:事务 T2 读取了事务 BT1未提交的数据。(一个事务读到另外一个事务还没有提交的数据)

幻读:事务 T2 读取了事务 T1 已提交的新增数据。(一个事务先后读取同一条记录,但两次读取的数据不同)

不可重复:事务 T2 读取了事务 T1 已提交的更改过(修改或删除)数据。(一个事务先后读取一个范围的记录,但两次读取的纪录数不同)


解决方案:

MySQL 里有四个隔离级别:

 Read uncommttied(可以读取未提交数据)Read committed(可以读取已提交数据)Repeatable read(可重复读)Serializable(可串行化) 

  

脏读:把事务隔离级别调整到READ COMMITTED

幻读:把事务隔离级别调整到REPEATABLE READ

不可重复:把事务隔离级别调整到SERIALIZABLE


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/754941.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号