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

行锁

行级锁是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. python增删改查人名管理_python3字典列表的增删改查(名片管理系统函数版)
  2. unity 游戏第一次安装完之后运行,切出来,点击桌面图标后黑屏问题
  3. proBuilder编辑的模型变黑
  4. Redis的持久化机制-RDB方式和AOF方式
  5. 计算机机房建设标准.doc,计算机机房建设标准(部分2)
  6. 九妹带你了解oracle
  7. [MATLAB学习笔记]peaks函数1013(2)
  8. Jscript中window.setInterval和window.setTimeout的区别
  9. 封头名义厚度如何圆整_压力容器封头厚度计算
  10. 三星 6.01 android操作系统耗电,三星6.01系统耗电加快是为什么
  11. myblog test
  12. Java并发编程实战之基于生产者消费者模式的日志服务读书笔记
  13. Sensor感应器介绍
  14. 导出指定layer或指定区域layout的GDS
  15. 0基础学Java(2)
  16. 这几个宝藏网站,一旦知道,你就离不开了!!!
  17. Bezout's Lemma 学习笔记
  18. 马化腾说视频号是全公司希望
  19. pthon 获取天干纪年
  20. 16.体测成绩判定(c函数调用)

热门文章

  1. 【附源码】计算机毕业设计SSM实验室预约管理系统
  2. 漫谈兼容内核之十七:再谈Windows的进程创建
  3. 使用Metasploit对MSSQL渗透测试步骤——学习笔记
  4. Ubuntu20安装erlang和rabbitmq
  5. VB.NET中的回车换行
  6. Windows下,Sublime text 在GoSublime中支持goimports
  7. 【Hive】总体标准差stddev()
  8. CentOS7 配置R语言及Rstudio-serve
  9. 怎样连接网站的服务器ipad,ipad可以连接云服务器地址
  10. owasp_我的Google夏天的owasp 2020代码之旅