按照锁的粒度划分:行锁、表锁、页锁

行锁

行级锁是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表锁、行锁和叶锁相关推荐

  1. 搞懂分布式技术16:浅谈分布式锁的几种方案

    搞懂分布式技术16:浅谈分布式锁的几种方案 前言 随着互联网技术的不断发展,数据量的不断增加,业务逻辑日趋复杂,在这种背景下,传统的集中式系统已经无法满足我们的业务需求,分布式系统被应用在更多的场景, ...

  2. 一文搞懂MySQL数据库分库分表

    如果数据量过大,大家一般会分库分表.分库需要注意的内容比较少,但分表需要注意的内容就多了. 工作这几年没遇过数据量特别大的业务,那些过亿的数据,因为索引设置合理,单表性能没有影响,所以实战中一直没用过 ...

  3. 丁奇mysql45讲百度云下载_MySQL实战45讲,丁奇带你搞懂MySQL【完结】

    开篇词.这一次,让我们一起来搞懂MySQL.mp3 开篇词.这一次,让我们一起来搞懂MySQL.pdf 01.基础架构:一条SQL查询语句是如何执行的?.mp3 01.基础架构:一条SQL查询语句是如 ...

  4. mysql 什么树_搞懂MySQL InnoDB B+树索引

    一.InnoDB索引 InnoDB支持以下几种索引: B+树索引 全文索引 哈希索引 本文将着重介绍B+树索引.其他两个全文索引和哈希索引只是做简单介绍一笔带过. 哈希索引是自适应的,也就是说这个不能 ...

  5. 学习最新大厂付费视频时整理的万字长文+配图带你搞懂 MySQL

    万字长文+配图带你搞懂 MySQL MySQL SQL的介绍 SQL分类 MySQL语法 创建数据库 修改.删除.使用数据库 DDL查询数据表 DDL创建数据表 修改数据表结构 删除数据表 DML添加 ...

  6. 一文搞懂 MySQL 索引

    一文搞懂 MySQL 索引 1.MySQL 索引 简介 1.1.MySQL 索引 是什么?  索引是一个单独的.存储在 磁盘 上的 数据库结构 ,包含着对数据表里 所有记录的 引用指针. 1.2. M ...

  7. 图文结合带你搞懂MySQL日志之Error Log(错误日志)

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 作者:KAiTO 文章来源:社区原创 往期回顾: 图 ...

  8. 一文搞懂两表关联时left join 、 on 以及where条件不同写法对结果的影响--文末有结论

    一文搞懂两表关联时left join 与 on 以及where条件不同写法对结果的影响–文末有结论 1.数据准备(建议使用本地mysql) a表: b表: 建表语句: Create EXTERNaL ...

  9. mysql decimal型转化为float_5分钟搞懂MySQL数据类型之数值型DECIMAL类型

    速成指南 5分钟搞懂MySQL数据类型 之数值型--DECIMAL类型 DECIMAL类型的语法:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL].其中M指定的是数字的总位 ...

最新文章

  1. nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping
  2. 亿级流量架构实战之秒杀设计
  3. CBS多机器人路径规划
  4. 修复:安装 CUDA9.0 Patch 1 时载入文件后闪退(cuda_9.0.176.1_windows.exe)
  5. Hadoop 面试题之Hbase
  6. 【Docker】 安装 mysql
  7. 安全技术可以采用计算机安全,2017年计算机三级《信息安全技术》习题
  8. 利用SQL查找表中的质数(prime number)和完全数(perfect number)以及几个有趣的SQL语句...
  9. MySQL 面试,必须掌握的 8 大核心点
  10. vue(vue-cli+vue-router)+babel+webpack项目搭建入门(四)
  11. input的oninput、onchange与onpropertychange事件
  12. (总结1)多机器人系统动态任务分配
  13. Oracle 分区表——Range分区
  14. 用手机如何把PDF转成PPT文件
  15. 【67】PCIe Power Management和linux对PME的处理
  16. Widar2.0:SAGE算法和SAGE算法在在无线信道参数估计中的应用
  17. 嵌入式STM32F767BGT6规格STM32F767BIT6引脚图 32Bit MCU+FPU
  18. 小心!这些开车姿势当心瘫痪,广大车友必备驾驶知识
  19. SUA 编译 BASH
  20. 蓝桥杯练习【数论基础】——一元三次方程求解

热门文章

  1. 情人节简单浪漫烟花html的代码
  2. centOS7下实践查询版本/CPU/内存/硬盘容量等硬件信息
  3. 几代数字无线通信系统标准汇总
  4. 2020.8.25 斗鱼Android开发二面面经
  5. 简述验证Anaconda是否安装成功的两种方式和Anaconda环境变量配置过程
  6. 【934. 最短的桥】
  7. Kakao拟16亿美元收购韩国最大音乐流媒体服务
  8. sqlserver阻止保存要求重新创建表的更改
  9. 程序员有话说 | 原来你是这样的程序员:麦霸、大厨、舞林高手……
  10. 由114.114.114.114和8.8.8.8学习DNS