MySQL锁分类

打印 上一主题 下一主题

主题 868|帖子 868|积分 2614

一、按锁的粒度划分


  • 全局锁

    • 界说:锁定整个数据库实例,克制所有写操作,确保数据备份同等性。
    • 加锁方式:通过FLUSH TABLES WITH READ LOCK实现,释放需实验UNLOCK TABLES。
    • 应用场景:适用于全库逻辑备份,但会壅闭所有数据变更。

  • 表级锁

    • 分类



  • 表锁:分为读锁(共享锁)和写锁(排他锁),由LOCK TABLES ... READ/WRITE显式控制。
  • 元数据锁(MDL) :自动在访问表时添加,防止表布局变更与读写冲突,事件提交后释放。
  • 意向锁:InnoDB特有,分为意向共享锁(IS)和意向排他锁(IX),用于快速判断表中是否有行级锁。

    • 特点:开销小、加锁快,但并发度低,易引发锁冲突。
    • 存储引擎支持:MyISAM仅支持表锁;InnoDB支持表锁与行锁。


  • 行级锁

    • 实现机制:由InnoDB引擎支持,基于索引实现。若SQL未使用索引,行锁会退化为表锁。
    • 具体类型



  • 记录锁(Record Lock) :锁定单行记录。
  • 间隙锁(Gap Lock) :锁定索引记录间的间隙,防止其他事件插入数据。
  • 临键锁(Next-Key Lock) :记录锁+间隙锁的组合,锁定左开右闭的区间,解决幻读问题。

    • 特点:开销大、加锁慢,可能引发死锁,但并发度高。


二、按锁的属性划分


  • 共享锁(S锁)

    • 界说:允许其他事件读取但禁止写入。
    • 加锁方式:通过SELECT ... LOCK IN SHARE MODE或SELECT ... FOR SHARE实现。
    • 应用场景:适用于多事件并发读取同一数据。

  • 排他锁(X锁)

    • 界说:禁止其他事件读写锁定对象。
    • 加锁方式:通过SELECT ... FOR UPDATE或更新语句(如UPDATE)自动添加。
    • 应用场景:数据修改或需要独占访问的场景。


三、按加锁机制划分


  • 悲观锁

    • 原理:假定并发冲突一定发生,操作前先获取锁(如共享锁或排他锁)。
    • 实现方式:通过数据库内置锁机制(如FOR UPDATE)实现。

  • 乐观锁

    • 原理:假定冲突较少,通过版本号或时间戳校验数据是否被修改。
    • 实现方式:使用WHERE条件检查数据版本,若冲突则重试或回滚。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表