本文中,我们详细介绍MySQLInnoDB存储引擎各种不同类型的锁,以及不同SQL语句分别会加什么样的锁。

阅读提示

1、本文所参考的MySQL文档版本是8.0,做实验的MySQL版本是8.0.13

2、本文主要参考了MySQL官方文档InnoDB锁定和事务机制

3、本文还参考了何登成的MySQL加锁处理分析、一个最不可思议的MySQL死锁分析以及阿里云RDS-数据库内核组的常用SQL语句的MDL加锁源码分析

4、MySQL是插件式的表存储引擎,数据库的锁是和存储引擎相关的,本文讨论的锁都是InnoDB存储引擎的锁

文章正文开始

“加什么样的锁”与以下因素相关

1、当前事务的隔离级别

2、SQL是一致性非锁定读(consistentnonlockingread)还是DML(INSERT/UPDATE/DELETE)或锁定读(lockingread)

3、SQL执行时是否使用了索引,所使用索引的类型(主键索引,辅助索引、唯一索引)

我们先分别介绍这几个因素

一、隔离级别(isolationlevel)

数据库事务需要满足ACID原则,“I”即隔离性,它要求两个事务互不影响,不能看到对方尚未提交的数据。数据库有4种隔离级别(isolationlevel),按着隔离性从弱到强(相应的,性能和并发性从强到弱)分别是

1、ReadUncommitted。下面简称RU

2、ReadCommitted。下面简称RC

3、RepeatableRead(MySQL的默认隔离级别)。下面简称RR

4、Serializable

“I”即隔离性正是通过锁机制来实现的。提到锁就会涉及到死锁,需要明确的是死锁的可能性并不受隔离级

mysql innodb 锁类型_详细介绍MySQL InnoDB存储引擎各种不同类型的锁相关推荐

  1. mysql握手_详细介绍mysql 协议的服务端握手包及对其解析

    概况 mysql客户端登陆到mysql服务端需要一个交互的过程,这里先看服务端给客户端发送的初始握手包.如下,client通过socket连接到server指定的端口后,server将往client发 ...

  2. mysql 中show 命令用法详细介绍 mysql过程(procedure)的使用

    a. show tables或show tables from database_name; -- 显示当前数据库中所有表的名称 b. show databases; -- 显示mysql 中所有数据 ...

  3. mysql数据库视图原理_详细分析mysql视图的原理及使用方法

    前言: 在MySQL中,视图可能是我们最常用的数据库对象之一了.那么你知道视图和表的区别吗?你知道创建及使用视图要注意哪些点吗?可能很多人对视图只是一知半解,想详细了解视图的同学看过来哟,本篇文章会详 ...

  4. mysql网络安装教程_详细教程--MySQL的安装与配置

    免安装版的Mysql MySQL关是一种关系数据库管理系统,所使用的 SQL 语言是用于访问数据库的最常用的 标准化语言,其特点为体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,在 Web 应 ...

  5. mysql eof_详细介绍mysql 协议的EOF包及解析

    git https://github.com/sea-boat/mysql-protocol 概况 mysql的EOF包用于标明查询结果的结尾. mysql通信报文结构类型名字描述int<3&g ...

  6. 详细介绍MySQL/MariaDB的锁

    官方手册:https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-transaction-model.html 1.事务提交的方式 在MariaD ...

  7. mysql如何设置多节点_详细介绍Mysql5.7从节点设置多线程主从复制的办法

    软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...

  8. 11. mysql锁机制_深入探讨MySQL锁机制

    MySQL锁机制究竟是怎样的呢?这是很多人都提到过的问题,下面就为您详细介绍MySQL锁机制方面的知识,希望可以让您MySQL锁机制有更多的了解. 当前MySQL已经支持 ISAM, MyISAM, ...

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

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

最新文章

  1. csapp 大作业 hello的一生
  2. CoreLocation MKMapView
  3. 二叉树遍历算法的六种c语言实现 递归与非递归
  4. 再谈网游同步技术:实时动作游戏同步方式和传输协议选择
  5. gedit搭建c开发环境
  6. js调用高德API获取所在当前城市
  7. eclipse中添加aptana插件(html.css.js自动提示)
  8. 进阶之路(基础篇) - 020 放弃Arduino IDE,拥抱Sublime Text 3
  9. 2020年上半年信息安全工程师上午选择题及解析
  10. 聚合支付SAAS系统OEM贴牌定制开发聚合支付系统开发、聚合支付平台开发等。
  11. C语言中的 pow 函数 使用方法及注意事项,和常见报错原因,且分享实战中的使用
  12. 2021年图扑软件重点事件回顾
  13. mysql字符串分割为数组_mysql下将分隔字符串转换为数组
  14. 深度学习在知识图谱的应用
  15. vs编译运行报错:未声明的标识符
  16. cublas 的学习笔记_1
  17. Scrapy爬取北京公交并保存MYSQL数据库实例
  18. HashMap 中那些精妙绝伦的设计
  19. strcmp函数及模拟
  20. 计算机基础课程范文,计算机基础课程计报告范文.doc

热门文章

  1. find()函数及其他常用函数总结
  2. centos mysql 存储_荒村野客-CentOS下Mysql 改变数据存储路径
  3. Spark Launcher Java API提交Spark算法
  4. acm网络选拔赛原则和晋级规则
  5. 调制解调器在联网中的功能
  6. 20 张图告诉你,如何实现一个任务调度系统
  7. VsCode(Visual Studio Code) MAC快捷键操作
  8. Hadoop技术(二)资源管理器YARN和分布式计算框架MapReduce
  9. 期货开户市场技术分析方法
  10. 深入理解RabbitMQ中的prefetch_count参数