Mysql幻读

本文深入探讨了MySQL中的幻读问题,它主要在可重复读事务隔离级别下出现。解决幻读的方法包括使用SELECT...FOR UPDATE或SELECT...FOR READ,通过间隙锁来防止新的插入操作。当锁定字段具有普通索引时,也会产生间隙锁。需要注意的是,如果没有索引,锁可能会升级为表锁。示例中展示了事务如何在主键间隙上产生间隙锁,并强调了锁在确保事务一致性和并发性中的作用。
摘要由CSDN通过智能技术生成

Mysql幻读

知识点:
1.幻读一般发生在可重复读级别。
2.幻读的解决办法,可通过可重复读级别下第一次读,使用
select * from … for update. 或者for read 可以加间隙写锁或者读锁。
3.间隙锁可看https://www.jianshu.com/p/bf862c37c4c9,(注意如果锁住的字段是唯一索引和主键,会变成行锁,除非是范围查询和锁住的行不存在,会生成间隙锁) 或者字段索引是普通索引也会生成间隙锁。
在这里插入图片描述
事务1:
在这里插入图片描述
事务2
在这里插入图片描述
可看到事务2阻塞了,说明产生了间隙锁。
事务3
在这里插入图片描述
可见间隙是针对主键间隙。

CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) DEFAULT NULL,
age int(11) DEFAULT NULL,
PRIMARY KEY (id),
KEY index_name (age)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

4.注意加锁的字段没有索引时,锁会升级为表锁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值