这些操作默认都会加一把写锁,和select for updae是等价的。
1.3 读写锁演示1. lock in share mode
2. select for update

1)读已提交级别下
1.查询使用的主键
总结:查询使用的是主键时,只需要在主键值对应的那一条数据加锁即可。
2.查询使用的唯一索引
总结:查询使用的是唯一索引时,只需要对查询值所对应的唯一索引记录项和对应的聚集索引上的项加锁即可。
3.查询使用的普通索引
总结:查询使用的是普通索引时,会对满足条件的索引记录都加上锁,同时对这些记录对应的聚集索引上的项也加锁。
4.查询使用没有用到索引
总结:查询的时候没有走索引,也只会对满足条件的记录加锁。
2)可重复读级别下
mysql默认隔离级别
1.查询使用的主键
和读已提交隔离级别一样
2.查询使用的唯一索引
和读已提交隔离级别一样
3.查询使用的普通索引
总结:可重复读级别可以解决幻读,解决的方式就是加了GAP锁。
4.查询使用没有用到索引
总结:查询的时候没有走索引,会对表中所有的记录以及间隙加锁。
特别地
读已提交情况下:
Mysql对某一个行加写锁,查出多少行,加多少行,其他无关行是可以查出来的,不管是走主键索引,唯一索引,普通索引,或是不走索引,都一样。
可重复读情况下:
可重复读情况下,Mysql采用了间隙锁,包括行以及行与行之间的间隙都会加锁。
对于走索引的情况下,它会锁着某一行,或者某一行范围的行及行间隙,
对于不走索引的情况下,它会把所有的行都锁着,防止其他行被更新成被锁的记录,这样的话就会升级为表锁。
Mysql这样做的目的就是为了解决幻读问题。
视频教程