开足码力,码动人生,微信搜索【 程序员大帝 】,关注这个一言不合就开车的的代码界老司机
本文 GitHub上已经收录 https://github.com/BeKingCoding/JavaKing , 一线大厂面试核心知识点、我的联系方式和技术交流群,欢迎Star和完善

前言

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

毕竟时间管理大师是一个用户访问多个资源,今天咱们来讲讲当多个用户并发访问同一个资源时的情况

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

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

简单说,当一个执行 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,为大家介绍了数据库的锁机制。针对不同情况,什么时候使用锁,锁到底生不生效是大家需要关注的问题。


Offer收割机》系列持续更新,也会定期分享互联网常用技术栈相关的文章,GitHub 上已经收录 https://github.com/BeKingCoding/JavaKing ,讲解一线大厂面试要求的核心知识点、并有对标阿里P7级别的成长体系脑图,欢迎加入技术交流群,我们一起有点东西。

我是一言不合就开车的代码界老司机无忌。创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

详解数据库锁机制和原理相关推荐

  1. 多线程---详解各种锁和AQS原理

    详解各种锁与锁的使用 1. synchronized 可重入 同一个线程 不同线程 2. volatile 保证线程可见性 禁止指令重排序 查看结果 3. 锁优化 锁细化 锁粗化 锁对象 4. CAS ...

  2. 详解数据库的锁机制及原理

    详解数据库的锁机制及原理 1.数据库锁的分类 2.行锁 共享锁(读锁S锁) 排他锁(写锁X锁) 更新锁 3.意向锁(IX/IS锁) 4.锁机制解释数据库隔离级别 5.元数据锁(MDL锁) 6.间隙锁 ...

  3. 【直击DTCC】浪潮霍俊路详解数据库集群锁机制管理

    2016年5月12日-14日,第七届中国数据库技术大会(DTCC 2016)在北京国际会议中心拉开帷幕.今年的大会首次设立了"数据库内核技术"专场,着重突出"内核的实现技 ...

  4. AQS基础——多图详解CLH锁的原理与实现

    1 什么是自旋锁和互斥锁? 由于CLH锁是一种自旋锁,那么我们先来看看自旋锁是什么? 自旋锁说白了也是一种互斥锁,只不过没有抢到锁的线程会一直自旋等待锁的释放,处于busy-waiting的状态,此时 ...

  5. 【MySQL进阶】MySQL事务隔离与锁机制底层原理万字总结(建议收藏!!)

    [MySQL进阶]MySQL事务隔离与锁机制底层原理万字总结(建议收藏!!) 参考资料: 美团技术团队:Innodb中事务隔离级别和锁的关系 数据库的锁,到底锁的是什么? 阿里面试:说说一致性读实现原 ...

  6. 深入浅出多线程编程实战(五)ThreadLocal详解(介绍、使用、原理、应用场景)

    深入浅出多线程编程实战(五)ThreadLocal详解(介绍.使用.原理.应用场景) 文章目录 一.ThreadLocal简介 二.ThreadLocal与Synchronized区别 三.Threa ...

  7. 网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)

    网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名.数字证书) 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTT ...

  8. 带你了解什么是MySQL数据库(八)数据库锁机制

    目录 数据库的锁机制 锁的分类 MySQL中的行级锁,表级锁,页级锁(粒度) 行级锁之共享锁与排他锁(级别) innodb存储引擎的锁机制 行级锁与表级锁区分 三种行锁算法 死锁问题 什么时候使用表锁 ...

  9. 详解JSP 中Spring工作原理及其作用

    详解JSP 中Spring工作原理及其作用 1.springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作. 2.Dispat ...

  10. 详解LibraBFT共识机制

    [Libra 技术解读]详解LibraBFT共识机制 ---------------- 版权声明:本文为CSDN博主「百度超级链xuper」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上 ...

最新文章

  1. spring包镜像下载地址
  2. Data Science Challenge / Competition
  3. python3.8怎么打开创建_Python3.8有哪些新功能 怎么入行Python开发
  4. 大学计算机——所有大学生都应学习的一门计算思维基础教育课程,_大学计算机_所有大学生都应学习的一门计算思维基础教育课程...
  5. 楼板计算塑形弹性_柴油发电机机房设计标准及原则:机房接地选址、柴发容量计算书...
  6. Nginx配置——禁止指定user_agent
  7. 话单数据仓库搭建(2)- 数据仓库ODS及DWD层
  8. cmd下执行java
  9. springboot validation 统一返回错误信息
  10. Splitter 控件的使用
  11. mysql dba视频课_MySQL DBA专家
  12. java lzma解压_lzma-java
  13. Android中计步器的实现
  14. 大天使之剑服务器维护,《大天使之剑H5》9月4日服务器临时维护公告
  15. win10注册表损坏开机蓝屏修复
  16. 274. H 指数(中)
  17. vsCode git 操作提示 Permission denied, please try again
  18. chrome-linux/chrome: error while loading shared libraries: libnss3.so解决方法
  19. python3画直方图出现“Polygon‘ object has no property ‘normed”
  20. cocos creator V1.9 制作像素鸟游戏(1)-场景设计

热门文章

  1. 【WEB程序设计】web程序设计的一些基本知识
  2. Python以TCp搭建小游戏服务器
  3. tomcat未自动解压war包原因分析
  4. 常用审计计算机软件,审计软件
  5. 学习攻略 | Python数据挖掘学习路线图
  6. 如何写一份竞品分析报告——产品经理养成路
  7. TabHost控件应用
  8. C#使用ITextSharp操作pdf
  9. 获取百度云盘真实下载链接(告别云盘客户端,全速下载)
  10. Java Web应用程序开发