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

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

1.数据库锁的分类

本图源自CSDN博主:Stephen.W

数据库锁一般可以分为两类,一个是悲观锁,一个是乐观锁

乐观锁一般是指用户自己实现的一种锁机制,假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。乐观锁的实现方式一般包括使用版本号和时间戳 (也就是在数据库中添加了版本号和时间戳字段,以便检测)

悲观锁一般就是我们通常说的数据库锁机制,以下讨论都是基于悲观锁

悲观锁主要表锁、行锁、页锁。在MyISAM中只用到表锁,不会有死锁的问题,锁的开销也很小,但是相应的并发能力很差。innodb实现了行级锁和表锁,锁的粒度变小了,并发能力变强,但是相应的锁的开销变大,很有可能出现死锁。同时innodb需要协调这两种锁,算法也变得复杂。InnoDB行锁是通过给索引上的索引项加锁来实现的,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁

表锁和行锁都分为共享锁和排他锁,而更新锁是为了解决行锁升级(共享锁升级为独占锁)的死锁问题

innodb中表锁和行锁一起用,所以为了提高效率才会有意向锁 (意向共享锁和意向排他锁)


2.行锁

共享锁(读锁S锁)

共享锁允许其他事务读,但是不允许写

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

  1. mysql update 并发 慢_详解Mysql的锁机制

    一.Mysql为什么要加锁 锁机制用于管理对共享资源的并发访问,是对数据库的一种保护机制,也是数据库在事务操作中保证事务数据一致性和完整性的一种机制.当有多个用户并发的去存取数据时,在数据库中就可能会 ...

  2. 一文详解MySQL的锁机制

    一.表级锁.行级锁.页级锁 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则. MySQL数据库由于其自身架构的特点,存在多种数据存储引擎, ...

  3. 一文详解 MySQL 的锁机制

    一.表级锁.行级锁.页级锁 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则. MySQL 数据库由于其自身架构的特点,存在多种数据存储引擎 ...

  4. 图文详解 HDFS 的工作机制及其原理

    大家好,我是大D. 今天开始给大家分享关于大数据入门技术栈--Hadoop的学习内容. 初识 Hadoop 为了解决大数据中海量数据的存储与计算问题,Hadoop 提供了一套分布式系统基础架构,核心内 ...

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

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

  6. MySQL锁、事务隔离级别、MVCC机制详解、间隙锁、死锁等

    一. 简介 1. 锁定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除了传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供需要用户共享的资源.如何保证数据并 ...

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

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

  8. 转载:Lock锁机制的原理及与Synchronized的比较——源码解说

    文章转载自:https://blog.csdn.net/Luxia_24/article/details/52403033(为了简化阅读难度,本文只挑选了大部分内容进行转载,并对代码进行了注释,更加详 ...

  9. 详解模板引擎工作机制

    本文讲的是详解模板引擎工作机制, 我已经使用各种模版引擎很久了,现在终于有时间研究一下模版引擎到底是如何工作的了. 简介 简单的说,模版引擎是一种可以用来完成涉及大量文本数据的编程任务的工具.一般而言 ...

最新文章

  1. android 电视关闭动画,Activity 展开和关闭动画
  2. Linux网络编程小知识(字节序、IP格式、函数、子网掩码、DNS域名解析代码实现)
  3. 指针04 - 零基础入门学习C语言44
  4. URAL - 1732 Ministry of Truth--kmp算法的应用(kmp模板)
  5. 【机器视觉学习笔记】OpenCV C++ 与 HSV颜色模型
  6. FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法
  7. 配置信息的优化,类型转换器
  8. vue 实现数据滚动显示_vue实现动态添加数据滚动条自动滚动到底部的示例代码...
  9. 基于shiro+jwt的真正rest url权限管理,前后端分离
  10. 跨越『时空』的难样本挖掘!
  11. EDA实验课课程笔记(三)——TCL脚本语言的学习1
  12. datacount+php,dataCount.php
  13. java语言诞生的主要贡献者_2020年12月编程语言排行+GitHub 年度报告正式发布,JavaScript 霸榜、TypeScript 爆发!...
  14. 【论文笔记】EMNLP2019: 基于层次多图卷积网络的实体类型分类
  15. canny边缘检测_每日习题-图像处理-Canny边缘检测(2020.4.15)
  16. idea使用jrebel热部署插件
  17. 【数据结构】--章节2.2----线性表的顺序表示和实现
  18. python的string与Unicode转换,gbk字符串编码
  19. SpringBoot2.4.2+Vue集成Activiti6流程引擎
  20. 阿里云平台购买域名 备案步骤

热门文章

  1. Auto.js一键解密 | 一键加密手机端工具更新至2.0
  2. ESP-IDF3.0
  3. 计算的本质——是对数据在电子粒度上进行重组建联
  4. TailScale 实现远端访问整段局域网(ZeroTier另一选择)
  5. STM32构建BootLoader实现多系统OTA
  6. 前端面试 --数据结构与算法篇
  7. (八)unity自带的着色器源码剖析之——————Unity3D的全局光照和阴影:下篇(unity3D中的球谐光照和SH球谐函数、unity实时阴影抗锯齿解决方案)
  8. PCB线宽与电流计算器--在线计算
  9. Redis实战——优惠券秒杀(超卖问题)
  10. StringBoot中String转JSON,JSON转Map或List