您当前的位置: 首页 >  sql

星夜孤帆

暂无认证

  • 2浏览

    0关注

    626博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MySQL锁原理

星夜孤帆 发布时间:2021-05-16 16:55:47 ,浏览量:2

一、读锁与写锁

1.1 读操作

1.2 写操作

这些操作默认都会加一把写锁,和select for updae是等价的。

1.3 读写锁演示

1. lock in share mode

2. select for update

二、行锁与表锁 2.1 查看锁情况SQL

2.2 行锁

2.2.1 间隙锁(Lock_Gap、Gap锁)

1)读已提交级别下

1.查询使用的主键

总结:查询使用的是主键时,只需要在主键值对应的那一条数据加锁即可。

2.查询使用的唯一索引

总结:查询使用的是唯一索引时,只需要对查询值所对应的唯一索引记录项和对应的聚集索引上的项加锁即可。

3.查询使用的普通索引

总结:查询使用的是普通索引时,会对满足条件的索引记录都加上锁,同时对这些记录对应的聚集索引上的项也加锁。

4.查询使用没有用到索引

总结:查询的时候没有走索引,也只会对满足条件的记录加锁。

2)可重复读级别下

mysql默认隔离级别

1.查询使用的主键

和读已提交隔离级别一样

2.查询使用的唯一索引

和读已提交隔离级别一样

3.查询使用的普通索引

总结:可重复读级别可以解决幻读,解决的方式就是加了GAP锁。

4.查询使用没有用到索引

总结:查询的时候没有走索引,会对表中所有的记录以及间隙加锁。

特别地

读已提交情况下:

Mysql对某一个行加写锁,查出多少行,加多少行,其他无关行是可以查出来的,不管是走主键索引,唯一索引,普通索引,或是不走索引,都一样。

可重复读情况下:

可重复读情况下,Mysql采用了间隙锁,包括行以及行与行之间的间隙都会加锁。

对于走索引的情况下,它会锁着某一行,或者某一行范围的行及行间隙,

对于不走索引的情况下,它会把所有的行都锁着,防止其他行被更新成被锁的记录,这样的话就会升级为表锁。

Mysql这样做的目的就是为了解决幻读问题。

视频教程

关注
打赏
1636984416
查看更多评论
立即登录/注册

微信扫码登录

0.3088s