Mysql的锁类型有哪些?

mysql 有三种类型的锁

  • 表锁:开销小,加锁快,不会出现死锁

  指对一整张表加锁,一般是DDL处理时使用(比如Alter)。

  由Mysql Server实现,使用的是一次性锁技术,会话开始时使用lock命令将后需要用到的表加锁,后面通过unlock tables释放锁。

  • 行锁:开销大,加锁man,会出现死锁

  指锁定某一行或者某几行,或者行与行之间的间隙。由存储引擎实现,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

原文地址:https://www.cnblogs.com/smallzhen/p/14608696.html