mysql 锁(标贝科技)

本文详细介绍了MySQL InnoDB存储引擎的锁机制,包括锁类型如表级锁、行级锁、意向锁,以及InnoDB如何通过意向锁、行锁、间隙锁和next-key锁来实现并发控制。此外,还探讨了InnoDB的多版本并发控制(MVCC)原理,如当前读、快照读、Read View和事务的可见性判断。内容适合于数据库管理员和开发人员深入理解MySQL的并发控制策略。
摘要由CSDN通过智能技术生成

标贝科技 https://ai.data-baker.com/#/?source=qwer12

填写邀请码fwwqgs,每日免费调用量还可以翻倍
在这里插入图片描述
在这里插入图片描述

mysql 锁

锁类型

类型

  • 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低

    • 这些存储引擎通过总是一次性同时获取所有需要的锁以及总是按相同的顺序获取表锁来避免死锁。
    • 表级锁更适合于以查询为主,并发用户少,只有少量按索引条件更新数据的应用,如Web 应用
  • 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高

    • 最大程度的支持并发,同时也带来了最大的锁开销
    • 在 InnoDB 中,除单个 SQL 组成的事务外,锁是逐步获得的,这就决定了在 InnoDB 中发生死锁是可能的
    • 行级锁只在存储引擎层实现,而Mysql服务器层没有实现。 行级锁更适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,如一些在线事务处理(OLTP)系统
  • 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般

锁粒度和兼容

意向锁

  • 实际应用中InnoDB许多行级锁与表级锁共存

  • 未来的某个时刻,事务可能要加共享/排它锁了,先提前声明一个意向(在索引树上打一个标记,其他表锁看到意向锁必须等待)

意向锁分类:
  • 意向共享锁(intention shared lock, IS),它预示着,事务有意向对表中的某些行加共享S锁

  • 意向排它锁(intention exclusive lock, IX),它预示着,事务有意向对表中的某些行加排它X锁

意向锁获取
  • 事务要获得某些行的S锁,必须先获得表的IS锁
  • 事务要获得某些行的X锁,必须先获得表的IX锁
意向锁的兼容
  • InnoDB使用共享锁,可以提高读读并发
  • 为了保证数据强一致,InnoDB使用强互斥锁,保证同一行记录修改与删除的串行性
  • InnoDB使用插入意向锁,可以提高插入并发
  • 由于意向锁仅仅表明意向,它其实是比较弱的锁,意向锁之间并不相互互斥,可以并行
意向共享锁(IS) 意向排他锁(IX) 共享锁(S) 排他锁(X)
意向共享锁(IS) 兼容 兼容 兼容 不兼容
意向排他锁(IX) 兼容 兼容 不兼容 不兼容
共享锁(S) 兼容 不兼容 兼容 不兼容
排他锁(X) 不兼容 不兼容 不兼容 不兼容

锁冲突兼容

</
Gap(间隙锁) Insert Intention(插入意向锁) Record(行锁) Next-Key
Gap(间隙锁) 兼容 兼容 兼容 兼容
Insert Intention(插入意向锁) 冲突 兼容 兼容 冲突
Record(行锁) 兼容 兼容 冲突 冲突
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值