锁
0|1什么时候需要锁
当且仅当 我们有并发操作(同一时间有很多增删改的操作)
0|1锁的分类
按照数据操作类型划分
读锁-共享锁
事务A对表加了读锁,其他事务对表继续进行加读锁:
事务A可以对表进行增删改操作,其他事务只能进行读。
写锁-排它锁
写锁只可以加一个,当前写操作没有完成前,它会阻断其他写锁和读锁。
事务A对表加了写锁,其他事务不能对表加任何类型的锁。
事务A可以进行增删改,其他事务不能进行所有操作。
按数据操作的颗粒度分类
在关系型数据库中,按数据操作的颗粒度划分,分为表锁,行锁和页锁。
表锁
MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MyISAM与InnoDB都支持表级锁定。表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。
特点:表锁开销小,加锁快,无死锁,锁定粒度大,发生锁冲突的概率最高,并发最低
行锁
MySQL中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁和排他锁。InnoDB存储引擎默认采用行锁。InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁
特点:行锁开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 InnoDB支持行级锁
页锁
页锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。
特点:开销和加锁时间界于表锁和行锁之间:会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
表锁的应用
表锁对当前操作的整张表加锁,实现简单 ,资源消耗也比较少,加锁快,不会出现死锁 。触发锁冲突的概率最高,并发度最低,MyISAM和 InnoDB引擎都支持表级锁。在 MyISAM 存储引擎中,会自动为 select语句加上共享锁,为 update/delete/insert 操作加上排他锁。
锁类型 | 锁定粒度 | 资源消耗 | 加锁速度 | 死锁 | 锁冲突概率 | 并发 |
---|---|---|---|---|---|---|
表锁 | 最大 | 资源消耗小 | 速度快 | 无 | 最高 | 最低 |
行锁 | 最细 | 开销大 | 速度慢 | 有 | 最低 | 最高 |
页锁 | 居中 | 居中 | 居中 | 有 | 居中 | 一般 |
__EOF__
作 者:YXH
出 处:https://www.cnblogs.com/YxinHaaa/p/17552202.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库