加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

新说MySQL事务隔离级别!

发布时间:2018-12-28 03:38:47 所属栏目:MySql教程 来源:孤独烟
导读:副标题#e# 引言 大家在面试中一定碰到过 说说事务的隔离级别吧? 老实说,事务隔离级别这个问题,无论是校招还是社招,面试官都爱问!然而目前网上很多文章,说句实在话啊,我看了后我都怀疑作者弄懂没!因为他们对可重复读(Repeatable Read)和串行化(seriali

By default, InnoDB operates in REPEATABLE READ transaction isolation level. In this case, InnoDB uses next-key locks for searches and index scans, which prevents phantom rows (see Section 14.7.4, “Phantom Rows”).

按照原本这句话的意思,应该是

InnoDB默认用了REPEATABLE READ。在这种情况下,使用next-key locks解决幻读问题!

结果估计,某个国内翻译人员翻着翻着变成了

InnoDB默认用了REPEATABLE READ。在这种情况下,可以解决幻读问题!

然后大家继续你抄我,我抄你,结果你懂的!

显然,漏了"使用了next-key locks!"这个条件后,意思完全改变,我们在该隔离级别下执行语句

  1. select * from tx_tb where pId >= 1; 

是快照读,是不加任何锁的,根本不能解决幻读问题,除非你用

  1. select * from tx_tb where pId >= 1 lock in share mode; 

这样,你就用上了next-key locks,才能解决幻读问题!

串行读

即SERIALIZABLE_READ。在该隔离级别下,所有的select语句后都自动加上lock in share mode。因此,在该隔离级别下,无论你如何进行查询,都会使用next-key locks。所有的select操作均为当前读!

新说MySQL事务隔离级别! 

OK,注意看上表红色部分!就是因为在该隔离级别下使用了next-key locks,innodb将pId=1这条索引记录,和(1,++∞)这个间隙锁住了。其他事务要在这个间隙上插数据,就会阻塞,从而防止幻读发生!

有的人会说,你这第二次查询的结果,也变了啊,明显和第一次查询结果不一样啊?对此,我只能说,请看清楚啊。这是被自己的事务改的,不是被其他事物修改的。这不算是幻读,也不是不可重复读。

总结

上面罗里吧嗦一大堆,最后来一个表格做总结吧,你面试答这个表就行。上面的一切是为了这张表做准备!

新说MySQL事务隔离级别!

【编辑推荐】

  1. 运维 | 美团数据库智能运维探索与实践
  2. MySQL自增id超大问题查询
  3. MySQL PK MongoDB:多文档事务支持,谁更友好?
  4. 数据库主要特点是保护数据的安全性和可靠性以及正确性和有效性
  5. MySQL主从复制的常见拓扑、原理分析以及如何提高效率
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读