美文网首页
事务----可重复读能解决幻读???

事务----可重复读能解决幻读???

作者: 枫叶忆 | 来源:发表于2019-05-26 12:00 被阅读0次

测试可重复读

------------------

建表

关闭事务自动提交

SET AUTOCOMMIT =0;

设置隔离级别为可重复读

[A]

1)mysql>commit ;

2)mysql>set session transaction isolation level repeatable read ; -- 可以重复读

3)mysql>start transaction ; -- 开始事务

4)mysql>select * from mytable ; -- 查询

9)mysql>select * from mytable  ;

尽管B事务更新了age=100,A事务查询结果并未受到影响,避免了不可重复读。

[B]

5)mysql>commit;

6)mysql>start transaction ;

7)mysql>update mytable set age = 100 where id = 1; -- 更新

8)mysql>commit;

再测试可重复读能否避免幻读

[A]

1)mysql>commit ;

2)mysql>set session transaction isolation level repeatable read ; -- 可重复读

3)mysql>start transaction ; -- 开始事务

4)mysql>select * from mytable; -- 查询

9)mysql>select * from mytable ;

并未出现幻读???

提交后,再次查询:

[B]

5)mysql>commit;

6)mysql>start transaction ;

7)mysql>insert into mytable (name,age) values('tomas',66); -- 更新

8)mysql>commit;


总结:可重复读可以解决幻读?  能,但是是一部分!!!

上链接:


https://juejin.im/post/5c9040e95188252d92095a9e

文中提到:

可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻读数据。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。Mysql默认使用该隔离级别。这可以通过“共享读锁”和“排他写锁”实现,即事务需要对某些数据进行修改必须对这些数据加 X 锁,读数据时需要加上 S 锁,当数据读取完成并不立刻释放 S 锁,而是等到事务结束后再释放。

     最终总结:测试结果告诉我们其实在MySQL可重复读的隔离级别中并不是完全解决了幻读的问题,而是解决了读数据情况下的幻读问题。

而对于修改的操作依旧存在幻读问题,就是说MVCC对于幻读的解决时不彻底的。



相关文章

  • InnoDB的MVCC如何解决幻读

    InnoDB默认的隔离级别是RR(可重复读),可以解决脏读和不可重复读,但是不能解决幻读问题。 什么是幻读? 事务...

  • MySQL的可重复读级别能解决幻读吗

    转载 MySQL的可重复读级别能解决幻读吗MySQL事务隔离级别的实现原理

  • 事务----可重复读能解决幻读???

    测试可重复读 ------------------ 建表 关闭事务自动提交 SET AUTOCOMMIT =0; ...

  • Innodb事务隔离级别和锁之间的关系

    1.事务特性: 2.事务隔离级别: 1.读未提交。 脏读,不可重复读,幻读。2.读已提交。 不可重复读。3.可重复...

  • mysql知识点

    mysql概览 一些基本问题 事务 事务相关基本问题 脏读 丢失修改 不可重复读 幻读 不可重复读 vs 幻读不可...

  • MySQL Innodb 事务隔离级别

    Reference 事务并发的可能问题与其解决方案脏读、幻读、不可重复读和丢失更新数据库并发事务存在的问题(脏读、...

  • SQL 多个事务并发时可能遇到的问题

    Reference 事务并发的可能问题与其解决方案脏读、幻读、不可重复读和丢失更新数据库并发事务存在的问题(脏读、...

  • 幻读是什么, 幻读有什么问题

    Innodb默认事务隔离级别是可重复读. 接下来的场景设定在可重复读隔离级别(特殊说明除外) 一、幻读是什么 ? ...

  • 数据库四大隔离级别

    首先定义四大隔离级别要解决的三种情况:脏读,不可重复读,幻读。 脏读:事务A读到了事务B未提交的事务数据。例:A正...

  • MySQL幻读

    幻读(phantom read) 前提条件:InnoDB引擎,可重复读隔离级别,使用当前读时。 表现:一个事务(同...

网友评论

      本文标题:事务----可重复读能解决幻读???

      本文链接:https://www.haomeiwen.com/subject/bgextctx.html