彻底搞懂MySQL表锁、行锁和叶锁
按照锁的粒度划分:行锁、表锁、页锁
行锁
行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。可能会出现死锁的情况
共享锁用法(Shared Locks 简称S锁 读锁):
若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
#共享锁就是允许多个线程同时获取一个锁,一个锁可以同时被多个线程拥有
select ... lock in share mode;
排它锁用法(Exclusive Locks 简称X 锁 写锁):
若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。
#排它锁,也称作独占锁,一个锁在某一时刻只能被一个线程占有,其它线程必须等待锁被释放之后才可能获取到锁。
select ... for update
表锁
表级锁是mysql锁中粒度最大的一种锁,表示当前的操作对整张表加锁,资源开销比行锁少,不会出现死锁的情况,但是发生锁冲突的概率很大。被大部分的mysql引擎支持,MyISAM和InnoDB都支持表级锁,但是InnoDB默认的是行级锁。
共享锁用法:
LOCK TABLE table_name [ AS alias_name ] READ
排它锁用法:
LOCK TABLE table_name [AS alias_name][ LOW_PRIORITY ] WRITE
解锁用法:
unlock tables;
当然MySQL InnoDB存储引擎中还有几种特殊的表锁,如下
- 意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。
- 意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。
- 自增锁(AUTO-INC Locks):特殊表锁,自增长计数器通过该“锁”来获得子增长计数器最大的计数值。
IS和IX,是InnoDB两种内部使用的意向锁(Intention Locks)这些会开单独的文章进行总结
比较
锁类型 | 性能 | 死锁 | 粒度 | 并发性能 | 支持的引擎 |
---|---|---|---|---|---|
表级锁 | 开销小,加锁快 | 不会出现死锁 | 锁定粒度大 | 发生锁冲突的概率最高,并发度最低 | InnoDB、MyISAM、MEMORY、BDB |
行级锁 | 开销大,加锁慢 | 会出现死锁 | 锁定粒度最小 | 发生锁冲突的概率最低,并发度最低 | InnoDB |
页面锁 | 开销和加锁时间界于表锁和行锁之间 | 会出现死锁 | 锁定粒度界于表锁和行锁之间 | 并发度一般。 | BDB |
彻底搞懂MySQL表锁、行锁和叶锁相关推荐
- 搞懂分布式技术16:浅谈分布式锁的几种方案
搞懂分布式技术16:浅谈分布式锁的几种方案 前言 随着互联网技术的不断发展,数据量的不断增加,业务逻辑日趋复杂,在这种背景下,传统的集中式系统已经无法满足我们的业务需求,分布式系统被应用在更多的场景, ...
- 一文搞懂MySQL数据库分库分表
如果数据量过大,大家一般会分库分表.分库需要注意的内容比较少,但分表需要注意的内容就多了. 工作这几年没遇过数据量特别大的业务,那些过亿的数据,因为索引设置合理,单表性能没有影响,所以实战中一直没用过 ...
- 丁奇mysql45讲百度云下载_MySQL实战45讲,丁奇带你搞懂MySQL【完结】
开篇词.这一次,让我们一起来搞懂MySQL.mp3 开篇词.这一次,让我们一起来搞懂MySQL.pdf 01.基础架构:一条SQL查询语句是如何执行的?.mp3 01.基础架构:一条SQL查询语句是如 ...
- mysql 什么树_搞懂MySQL InnoDB B+树索引
一.InnoDB索引 InnoDB支持以下几种索引: B+树索引 全文索引 哈希索引 本文将着重介绍B+树索引.其他两个全文索引和哈希索引只是做简单介绍一笔带过. 哈希索引是自适应的,也就是说这个不能 ...
- 学习最新大厂付费视频时整理的万字长文+配图带你搞懂 MySQL
万字长文+配图带你搞懂 MySQL MySQL SQL的介绍 SQL分类 MySQL语法 创建数据库 修改.删除.使用数据库 DDL查询数据表 DDL创建数据表 修改数据表结构 删除数据表 DML添加 ...
- 一文搞懂 MySQL 索引
一文搞懂 MySQL 索引 1.MySQL 索引 简介 1.1.MySQL 索引 是什么? 索引是一个单独的.存储在 磁盘 上的 数据库结构 ,包含着对数据表里 所有记录的 引用指针. 1.2. M ...
- 图文结合带你搞懂MySQL日志之Error Log(错误日志)
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 作者:KAiTO 文章来源:社区原创 往期回顾: 图 ...
- 一文搞懂两表关联时left join 、 on 以及where条件不同写法对结果的影响--文末有结论
一文搞懂两表关联时left join 与 on 以及where条件不同写法对结果的影响–文末有结论 1.数据准备(建议使用本地mysql) a表: b表: 建表语句: Create EXTERNaL ...
- mysql decimal型转化为float_5分钟搞懂MySQL数据类型之数值型DECIMAL类型
速成指南 5分钟搞懂MySQL数据类型 之数值型--DECIMAL类型 DECIMAL类型的语法:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL].其中M指定的是数字的总位 ...
最新文章
- nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping
- 亿级流量架构实战之秒杀设计
- CBS多机器人路径规划
- 修复:安装 CUDA9.0 Patch 1 时载入文件后闪退(cuda_9.0.176.1_windows.exe)
- Hadoop 面试题之Hbase
- 【Docker】 安装 mysql
- 安全技术可以采用计算机安全,2017年计算机三级《信息安全技术》习题
- 利用SQL查找表中的质数(prime number)和完全数(perfect number)以及几个有趣的SQL语句...
- MySQL 面试,必须掌握的 8 大核心点
- vue(vue-cli+vue-router)+babel+webpack项目搭建入门(四)
- input的oninput、onchange与onpropertychange事件
- (总结1)多机器人系统动态任务分配
- Oracle 分区表——Range分区
- 用手机如何把PDF转成PPT文件
- 【67】PCIe Power Management和linux对PME的处理
- Widar2.0:SAGE算法和SAGE算法在在无线信道参数估计中的应用
- 嵌入式STM32F767BGT6规格STM32F767BIT6引脚图 32Bit MCU+FPU
- 小心!这些开车姿势当心瘫痪,广大车友必备驾驶知识
- SUA 编译 BASH
- 蓝桥杯练习【数论基础】——一元三次方程求解
热门文章
- 情人节简单浪漫烟花html的代码
- centOS7下实践查询版本/CPU/内存/硬盘容量等硬件信息
- 几代数字无线通信系统标准汇总
- 2020.8.25 斗鱼Android开发二面面经
- 简述验证Anaconda是否安装成功的两种方式和Anaconda环境变量配置过程
- 【934. 最短的桥】
- Kakao拟16亿美元收购韩国最大音乐流媒体服务
- sqlserver阻止保存要求重新创建表的更改
- 程序员有话说 | 原来你是这样的程序员:麦霸、大厨、舞林高手……
- 由114.114.114.114和8.8.8.8学习DNS