你的位置:首页 » 数据库 » 正文

Mysql锁 - 类型概括(持续完善)

选择字号: 超大 标准 发布时间:2018-6-28 15:7:14 | 作者:kuyun | 0个评论 | 人浏览

InnoDB存储引擎支持多粒度锁定,即表级锁和行级锁“同时”存在。且行级锁的数量不影响开销,因为使用的是位图标记的算法。参考InnoDB的逻辑存储结构学习.

介绍mysql锁之前,先来简单了解一下宏观概念上的锁的类型:

  • 互斥锁:

  • 独占锁:

  • 乐观锁:

  • 悲观锁:同独占锁。

  • 排它锁:

  • 共享锁:有时称读锁。

  • 自旋锁:

mysql锁大致分为以下几类:

  • 表级锁(锁表)

  • 页级锁(锁页)

  • 行级锁(锁行)

  • 意向锁(表锁和行锁的兼容)

  • 插入意向锁(insert插入数据时专有锁)

  • 元数据锁(基础锁)

  • 自增锁(主键自增)

在实际使用中,还细分为具体的【排它型X锁】和【共享型S锁】,对于行级锁,还有更细致的类型:R锁、GAP锁和Next-key锁。


表级锁

比如MyISAM只有表级锁。表锁分【排它型X锁】和【共享型S锁】,MyISAM中称为:表共享锁和表独占写锁。

表锁性能差,不利于并发更新记录,因此innodb引擎支持的行锁可以大大提高并发,但引入了死锁的问题:不同事务分别持有某一记录的锁不释放,同时申请对方持有的行锁。


行级锁

对一个记录加锁的两种类型:

  • 排它锁X: 

    • select … from … where … for update

    • 同一时刻,只能有一个事务申请到X锁,其他的不管是读还是写,都需要排队,即堵塞其他的事务对X锁和S锁的申请。

  • 共享锁S: 

    • select … from … where … lock in share mode

    • 允许多个事务并发的申请S锁不堵塞,即可以并发读,不冲突。

innodb行锁的机制较为复杂,无论是X锁还是S锁,根据不同的需求又衍生出作用丰富的锁:

  • R锁:记录锁

  • Gap锁:间隙锁

  • Next-key锁:简称NK锁,结合R锁和Gap锁,是innodb默认的行锁模式。

 
注:如果没有设置主键,innodb会自动生成隐式的主键,且是自增的


标签:

天兴工作室接受zblog模板定制

猜你喜欢

发表评论

必填

选填

选填

必填,不填不让过哦,嘻嘻。

记住我,下次回复时不用重新输入个人信息

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表
Tags列表