MySQL 按锁的粒度可以细分为行级锁、页级锁和表级锁。
我们可以将锁粒度理解成锁范围。

1)表级锁(table lock)

表级锁为表级别的锁定,会锁定整张表,可以很好的避免死锁,是 MySQL 中最大颗粒度的锁定机制。

一个用户在对表进行写操作(插入、删除、更新等)时,需要先获得写锁,这会阻塞其它用户对该表的所有读写操作。没有写锁时,其它读取的用户才能获得读锁,读锁之间是不相互阻塞的。

表级锁最大的特点就是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。当然,锁定颗粒度大带来最大的负面影响就是出现锁定资源争用的概率会很高,致使并发度大打折扣。

不过在某些特定的场景中,表级锁也可以有良好的性能。例如,READ LOCAL 表级锁支持某些类型的并发写操作。另外,写锁也比读锁有更高的优先级,因此一个写锁请求可能会被插入到读锁队列的前面(写锁可以插入到锁队列中读锁的前面,反之读锁则不能插入到写锁的前面)。

使用表级锁的主要是 MyISAM,MEMORY,CSV 等一些非事务性存储引擎。

尽管存储引擎可以管理自己的锁,MySQL 本身还是会使用各种有效的表级锁来实现不同的目的。例如,服务器会为诸如 ALTER TABLE 之类的语句使用表级锁,而忽略存储引擎的锁机制。

2)页级锁(page lock)

页级锁是 MySQL 中比较独特的一种锁定级别,在其他数据库管理软件中并不常见。

页级锁的颗粒度介于行级锁与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力同样也是介于上面二者之间。另外,页级锁和行级锁一样,会发生死锁。

页级锁主要应用于 BDB 存储引擎。

3)行级锁(row lock)

行级锁的锁定颗粒度在 MySQL 中是最小的,只针对操作的当前行进行加锁,所以行级锁发生锁定资源争用的概率也最小。

行级锁能够给予应用程序尽可能大的并发处理能力,从而提高需要高并发应用系统的整体性能。虽然行级锁在并发处理能力上面有较大的优势,但也因此带来了不少弊端。

由于锁定资源的颗粒度很小,所以每次获取锁和释放锁需要做的事情也就更多,带来的消耗自然也就更大。此外,行级锁也最容易发生死锁。所以说行级锁最大程度地支持并发处理的同时,也带来了最大的锁开销。

行级锁主要应用于 InnoDB 存储引擎。

随着锁定资源颗粒度的减小,锁定相同数据量的数据所需要消耗的内存数量也越来越多,实现算法也会越来越复杂。不过,随着锁定资源颗粒度的减小,应用程序的访问请求遇到锁等待的可能性也会随之降低,系统整体并发度也会随之提升。

MySQL 这 3 种锁的特性可大致归纳如下:

从上述特点可见,很难笼统的说哪种锁更好,只能具体应用具体分析。

从锁的角度来说,表级锁适合以查询为主,只有少量按索引条件更新数据的应用,如 Web 应用。而行级锁更适合于有大量按索引条件,同时又有并发查询的应用,如一些在线事务处理(OLTP)系统。

8、MySQL表锁、行锁和页锁相关推荐

  1. mysql读写分离主从原理、事务隔离级别及使用、锁表和锁行场景、乐观锁和悲观锁、lock锁和sychronized区别及使用自己学习之后总结和参考一些博客感觉系统了解了

    synchronized与Lock的区别 两者区别: 1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类: 2.synchronized无法判断是否获取锁的状态 ...

  2. mysql 锁 行级_全局锁、表级锁、行级锁mysql 极客评论笔记

    根据加锁范围:MySQL里面的锁可以分为: 一.全局锁: 对整个数据库实例加锁. MySQL提供加全局读锁的方法:Flush tables with read lock(FTWRL) 这个命令可以使整 ...

  3. php查询mysql表的行数据类型,PHP 使用mysql_fetch_row 查询获得数据行列表的简单示例...

    对PHP MYSQL mysql_fetch_row –从查询获得数据行列表感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! mysql_fetch_row用于从mysql数据库中查询数据 ...

  4. vb 获取mysql表第一行数据_vb如何将远程获取的数据插入本机数据表中

    双击按钮添加如下代码 Private Sub Command1_Click() Dim objRemoteConn       As New ADODB.Connection Dim objLocal ...

  5. mysql怎么加全局锁_MySQL锁机制/管理(并发锁,行锁,表锁,预加锁,全局锁等等)

    MySQL实验室 1.?MySQL 中并发和隔离控制机制 Meta-data元数据锁:在table cache缓存里实现的,为DDL(Data Definition Language)提供隔离操作.一 ...

  6. select .... for update究竟锁表还是锁行?

    文章目录 介绍 实例验证 实例前准备数据 实例1--验证通过主键索引查询会锁行 实例2--验证通过普通索引作为查询条件会锁行 实例3--验证查询条件不命中索引会锁表 实例4--验证联合索引匹配到第一个 ...

  7. MySQL 面试必备:又一神器“锁”,不会的在面试都挂了

    点击上方 好好学java ,选择 星标 公众号重磅资讯.干货,第一时间送达 今日推荐:MySQL 高频面试题,都在这了个人原创+1博客:点击前往,查看更多 1 什么是锁 1.1 锁的概述 在生活中锁的 ...

  8. MySQL 锁的相关知识 | lock与latch、锁的类型、简谈MVCC、锁算法、死锁、锁升级

    文章目录 lock与latch 锁的类型 MVCC 一致性非锁定读(快照读) 一致性锁定读(当前读) 锁算法 死锁 锁升级 lock与latch 在了解数据库锁之前,首先就要区分开 lock 和 la ...

  9. MySQL中的行级锁,表级锁,页级锁

    数据库锁是数据库系统中非常重要的一个概念,本文将深入分析数据库中的锁相关知识,您可点击下方音频收听或直接查看文稿中的文字. 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并 ...

最新文章

  1. Java 集合框架,看这篇真的够了!
  2. ubuntu系统下创建软件桌面快捷方式
  3. 图解Android事件传递之ViewGroup篇
  4. java 随机生成10个整数_Java:随机生成10个整数(1-100),对生成的序列进行排序,并插入一个任意数...
  5. 移动平均线ma分析_使用动态移动平均线构建交互式库存量和价格分析图
  6. js ...运算符_「 giao-js 」用js写一个js解释器
  7. empty怎么发音_empty是什么意思
  8. 《音频、图像及视频技术》学习笔记
  9. 天津事业编计算机岗位综合知识,天津事业编综合知识考什么
  10. android apk加密技术,android apk 自我保护技术-加密apk
  11. 屏幕大师4k屏幕测试软件,如何检测电视屏幕真伪4K、坏点漏光?两款工具一键辨别!...
  12. 智慧工地帮助建筑企业高效实现工人实名制管理
  13. Android 11.0 12.0SystemUI修改状态栏电池图标样式为横屏显示
  14. java打印输出羞漫画
  15. python中np.array的shape(2,)与shape(1 ,2)的运算细节
  16. 两点GPS经纬度获取局部位置的理论
  17. 1768 Problem A 算法7-15:迪杰斯特拉最短路径算法
  18. 港科百创 | 苏孝宇教授团队获数千万元Pre-A轮融资,祝贺「音科思」!
  19. Xgboost实践 | 第一名天池o2o优惠券的使用预测思路完整版
  20. javaSE探赜索隐四<基本排序算法>

热门文章

  1. BC:带你温习并解读《中国区块链技术和应用发展白皮书》—区块链标准体系框架
  2. Algorithm:C++语言实现之求最大连续子数组(暴力法、分治法、分析法、动态规划法)
  3. golang 学习 (八)协程
  4. content type 介绍
  5. 使用Unified Auditing Policy审计数据泵导出操作
  6. 在Eclipse中编译maven项目出的问题
  7. UVM基础之------uvm_port_base
  8. WIFI只sta和ap建立连接的过程
  9. 零起步了解RK3288环境搭建以及版本编译
  10. ST17H26开发小总结