彻底搞懂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指定的是数字的总位 ...
最新文章
- python增删改查人名管理_python3字典列表的增删改查(名片管理系统函数版)
- unity 游戏第一次安装完之后运行,切出来,点击桌面图标后黑屏问题
- proBuilder编辑的模型变黑
- Redis的持久化机制-RDB方式和AOF方式
- 计算机机房建设标准.doc,计算机机房建设标准(部分2)
- 九妹带你了解oracle
- [MATLAB学习笔记]peaks函数1013(2)
- Jscript中window.setInterval和window.setTimeout的区别
- 封头名义厚度如何圆整_压力容器封头厚度计算
- 三星 6.01 android操作系统耗电,三星6.01系统耗电加快是为什么
- myblog test
- Java并发编程实战之基于生产者消费者模式的日志服务读书笔记
- Sensor感应器介绍
- 导出指定layer或指定区域layout的GDS
- 0基础学Java(2)
- 这几个宝藏网站,一旦知道,你就离不开了!!!
- Bezout's Lemma 学习笔记
- 马化腾说视频号是全公司希望
- pthon 获取天干纪年
- 16.体测成绩判定(c函数调用)
热门文章
- 【附源码】计算机毕业设计SSM实验室预约管理系统
- 漫谈兼容内核之十七:再谈Windows的进程创建
- 使用Metasploit对MSSQL渗透测试步骤——学习笔记
- Ubuntu20安装erlang和rabbitmq
- VB.NET中的回车换行
- Windows下,Sublime text 在GoSublime中支持goimports
- 【Hive】总体标准差stddev()
- CentOS7 配置R语言及Rstudio-serve
- 怎样连接网站的服务器ipad,ipad可以连接云服务器地址
- owasp_我的Google夏天的owasp 2020代码之旅