当前位置:首页 > 单片机 > 架构师社区
[导读]前言 在座的朋友们,你们的时间够用吗?想要成为一个成功的人吗?如果你们都有这样的疑惑,那就保持一刻谦虚的心态,跟着罗老师学习时间管理吧! 毕竟时间管理大师是一个用户访问多个资源,今天咱们来讲讲当多个用户并发访问同一个资源时的情况 在数据库中,


前言

在座的朋友们,你们的时间够用吗?想要成为一个成功的人吗?如果你们都有这样的疑惑,那就保持一刻谦虚的心态,跟着罗老师学习时间管理吧!


数据库锁机制为什么很重要?


毕竟时间管理大师是一个用户访问多个资源,今天咱们来讲讲当多个用户并发访问同一个资源时的情况数据库锁机制为什么很重要?数据库锁机制为什么很重要?


在数据库中,如果多个事务同时对一个数据进行操作,并发的操作若不加控制,可能会读取和存储不正确的数据,破坏数据库的一致性、脏读、不可重复读、幻读等、甚至可能产生死锁。


为了解决这个问题,加锁是一个非常重要的技术,对实现数据库并发控制是一个好的方案。


简单说,当一个执行 sql 语句的事务想要操作表记录之前,先向数据库发出请求,对你访问的记录加锁,在这个事务释放这个锁之前,其他事务不能对这些数据进行更新操作。


本文将基于 MySQL,介绍数据库锁机制,相信大家耐心看了之后肯定有收获,码字不易,别忘了「在看」,「转发」哦。

  • 锁的类型

  • MyISAM 锁机制

  • InnoDB 锁机制

正文

01 锁的类型

从对数据的操作粒度来划分,MySQL 大致可归纳为 3 种锁。

表级锁

表级别的锁定是 MySQL 各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。


所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。


当然,锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并发大度大打折扣。

行级锁

行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。


由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。


虽然能够在并发处理能力上面有较大的优势,但是行级锁定也因此带来了不少弊端。由于锁定资源的颗粒度很小,所以每次获取锁和释放锁需要做的事情也更多,带来的消耗自然也就更大了。此外,行级锁定也最容易发生死锁。

数据库锁机制为什么很重要?

页级锁

页面锁会去锁定一页的数据,我们知道 MySQL 的索引本身是由 B+ 树实现的。


每个叶子节点的单位页,叶子节点上面存放了多个记录行,数据存储是按照一页一页来的,每次锁定一页的数据,其实就是相邻的数据,开销和加锁时间界于表锁和行锁之间。


页级锁也会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

02 MyISAM锁机制

MyISAM引擎只提供表锁。


在执行查询语句( SELECT )前,会自动给涉及的表加读锁,此时允许其他用户对同一表的读操作。但会阻塞对同一个表的写操作。


在执行更新操作( UPDATE、DELETE、INSERT 等)前,会自动给涉及的表加写锁,此时会阻塞其他用户对同一个表的读操作和写操作。

03 InnoDB锁机制

InnoDB 支持表锁、行锁,实际上InnoDB 是通过给索引项加锁,来实现行锁的。


只有查询数据时,检索条件走索引才可以使用行级锁,否则 InnoDB 将使用表锁。


在实际开发中,要特别注意 InnoDB 这一特性,不然,可能造成大量的锁冲突,从而影响并发!!!

InnoDB使用索引的条件

(1)在不通过索引条件查询的时候,InnoDB 确实使用的是表锁,而不是行锁。


(2)行锁是针对索引加锁,不是针对记录加的锁。即使访问的是不同行,但如果它们索引相同,还是会出现锁冲突。


(3)当表中含有多个索引的时候,不同的事务可以使用不同的索引锁定不同的行。


(4)即使在条件中使用了索引,但是否使用索引来检索数据是由 MySQL 通过判断不同执行计划的代价决定的。如果 MySQL 认为全表扫描效率更高,比如很小的表,也不会使用索引,此时 InnoDB 将使用表锁,而不是行锁。因此,在分析锁冲突的时候,不要忘记检查 SQL 的执行计划,以确定是否真正使用了索引。


在默认的可重复读隔离级别下:


执行查询语句( SELECT )前,由于 MVCC(多版本控制)的方式,什么锁都不会加。


在执行更新操作( UPDATE、DELETE、INSERT 等)前,会自动给涉及的行加写锁,此时会阻塞其他用户的写操作,但是通过 MVCC(多版本控制)的方式允许读操作。

04 总结

通过这篇文章,基于MySQL,为大家介绍了数据库的锁机制。针对不同情况,什么时候使用锁,锁到底生不生效是大家需要关注的问题。


特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

数据库锁机制为什么很重要?

数据库锁机制为什么很重要?

数据库锁机制为什么很重要?

长按订阅更多精彩▼

数据库锁机制为什么很重要?

如有收获,点个在看,诚挚感谢

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

北京2026年7月17日 /美通社/ -- 近日,国际公认的测试、检验和认证机构SGS集团旗下SGS FIMKO OY(NB 0598)正式列入欧盟委员会公告机构数据库,成为《欧盟电池法规》(EU 2023/1542)框...

关键字: 电池 测试 供应链 数据库

从计算机科学的角度来看,该项目需要从特定地理坐标获取极光可见性数据。这对于创建一个能够随该山地当前极光状态动态变化的灯光场景至关重要。

关键字: LED灯带 API 数据库

北京——2026年5月8日 亚马逊云科技宣布,行业知名的社交娱乐公司HOLLA Group全面使用亚马逊云科技,依托亚马逊云科技覆盖全球的基础设施以及领先的AI技术,持续增强旗下实时视频社交平台的稳定运营、安全合规、内容...

关键字: AI 存储 数据库

济南2026年4月30日 /美通社/ -- 4月27日至28日,以"以开源之道,行致远之志"为主题的HOW2026中国数据库开源发展峰会暨PostgreSQL高峰论坛在济南成功举办。大会设置1场主论坛...

关键字: 开源 数据库 POSTGRESQL AI

济南2026年4月28日 /美通社/ -- 4月27日,以"以开源之道,行致远之志"为主题的HOW 2026 中国数据库开源发展峰会暨PostgreSQL高峰论坛在济南山东大厦隆重开幕。本次大会由开源...

关键字: 开源 数据库 POSTGRESQL 计算机

济南2026年4月24日 /美通社/ --4月28日至5月4日,2026数字中国建设峰会即将在福州隆重举行。作为峰会的重要组成部分,2026数字中国创新大赛•信创赛道全面升级,采用"行业赛+全国总决赛"...

关键字: 大赛 数据库 数据安全 医疗数据

上海2026年3月26日 /美通社/ -- 近日,立邦正式成为高端智能电动汽车品牌阿维塔的官方售后修补漆供应商。本次合作,立邦将环保涂装领域的技术积累导入阿维塔售后服务体系,提供从底到面的高性能水性修补漆解决方案与精准色...

关键字: 新能源汽车 数据库 智能电动汽车

在现代应用架构中,数据库连接池是提升系统性能、优化资源利用的关键组件。它通过复用数据库连接,避免了频繁创建和销毁连接带来的性能开销,同时能有效控制并发连接数,防止数据库因过载而崩溃。然而,连接池大小的设置是一项极具挑战性...

关键字: 数据库 数据

全新工具集加快设计进程、规避潜在错误,并简化测试全生命周期中的文档管理

关键字: 信号路由 电子测试 数据库

在互联网业务高速发展的背景下,单台MySQL数据库服务器往往难以应对日益增长的并发访问量与数据存储需求。主从复制架构作为MySQL内置的核心高可用方案,通过将数据从主服务器(Master)复制到一台或多台从服务器(Sla...

关键字: 数据库 存储
关闭