Mysql的锁类型有哪些?
mysql 有三种类型的锁
- 表锁:开销小,加锁快,不会出现死锁
指对一整张表加锁,一般是DDL处理时使用(比如Alter)。
由Mysql Server实现,使用的是一次性锁技术,会话开始时使用lock命令将后需要用到的表加锁,后面通过unlock tables释放锁。
- 行锁:开销大,加锁慢,会出现死锁
指锁定某一行或者某几行,或者行与行之间的间隙。由存储引擎实现,InnoDB支持行锁,但是myISam只能用mysql Server提供的表锁。
①update user set age = 10 where id = 49;
②update user set age = 10 where name = 'Tom';
以上俩sql,①在主索引加锁,②在二级索引name加锁并再在主索引加锁,由此可见主索引只需要加一次锁,二级索引需要加两次锁。而多行加锁则会重复①或②的加锁流程。
- 页锁:开销大于表锁小于行锁,会出现死锁(暂不做解释)
以上总结参考:https://mp.weixin.qq.com/s/liCIjDJYPONvPb1BWAqw0w、https://mp.weixin.qq.com/s/rtSdXR9GxPn39bFmmZVrnA