时间:2021-07-01 10:21:17 帮助过:13人阅读
是快照读,是不加任何锁的,根本不能解决幻读问题,除非你用
select * from tx_tb where pId >= 1 lock in share mode;
这样,你就用上了next-key locks,解决了幻读问题!
在该隔离级别下,所有的select
语句后都自动加上lock in share mode
。因此,在该隔离级别下,无论你如何进行查询,都会使用next-key locks
。所有的select
操作均为当前读!
OK,注意看上表红色部分!就是因为使用了next-key locks
,innodb将PiD=1这条索引记录,和(1,++∞)这个间隙锁住了。其他事务要在这个间隙上插数据,就会阻塞,从而防止幻读发生!
有的人会说,你这第二次查询的结果,也变了啊,明显和第一次查询结果不一样啊?对此,我只能说,请看清楚啊。这是被自己的事务改的,不是被其他事物修改的。这不算是幻读,也不是不可重复读。
上面罗里吧嗦一大堆,最后来一个表格做总结吧,你面试答这个表就行。上面的一切是为了这张表做准备!
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | 是 | 是 | 是 |
不可重复读 | 否 | 是 | 是 |
可重复读 | 否 | 否 | 是 |
串行化 | 否 | 否 | 否 |
【转】新说Mysql事务隔离级别
标签:nsa key scan isolation 内容 appear mysql man 否则