我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql表锁和行锁区别是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql表锁和行锁区别是什么

小编给大家分享一下mysql表锁和行锁区别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、表锁

特点:偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

我们在编辑表,或者执行修改表的事情了语句的时候,一般都会给表加上表锁,可以避免一些不同步的事情出现,表锁分为两种,一种是读锁,一种是写锁。

我们可以手动给表加上这两种锁,语句是:

lock table 表名 read(write);

释放所有表的锁:

unlock tables;

查看加锁的表:

show open tables;

加读锁(共享锁):

我们给表加上读锁会有什么效果呢?

1、我们加读锁的这个进程可以读加读锁的表,但是不能读其他的表。

2、加读锁的这个进程不能update加读锁的表。

3、其他进程可以读加读锁的表(因为是共享锁),也可以读其他表

4、其他进程update加读锁的表会一直处于等待锁的状态,直到锁被释放后才会update成功。

加写锁(独占锁):

1、加锁进程可以对加锁的表做任何操作(CURD)。

2、其他进程则不能查询加锁的表,需等待锁释放

总结:

读锁会阻塞写,但是不会堵塞读。而写锁则会把读和写都堵塞。(特别注意进程)

分析:

show status like 'table%';

输入上述命令,可得:

+----------------------------+----------+
| Variable_name        | Value |
+----------------------------+----------+
| Table_locks_immediate | 105         |
| Table_locks_waited   | 3           |
+----------------------------+----------+

Table_locks_immediate:产生表级锁定的次数,表示可以立即获取锁的查询次数,每立即获取锁值加1 。

Table_locks_waited:出现表级锁定争用而发生等待的次数(不能立即获取锁的次数,每等待一次锁值加1),此值高则说明存在着较严重的表级锁争用情况。

二、行锁

特点:偏向InnoDB存储引擎,开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

行锁支持事务,所以  有关事务的知识下篇博客再总结。

行为:

1、当我们对一行进行更新但是不提交的时候,其他进程也对该行进行更新则需要进行等待,这就是行锁。

2、如果我们对一行进行更新,其他进程更新别的行是不会受影响的。

行锁升级为表锁:

当我们的行锁涉及到索引失效的时候,会触发表锁的行为。

正常情况,各自锁定各自的行,互相不影响,一个2000另一个3000

由于在column字段b上面建了索引,如果没有正常使用,会导致行锁变表锁

比如没加单引号导致索引失效,行锁变表锁

被阻塞,等待。只到Session_1提交后才阻塞解除,完成更新

所以,由此,我们还是要善用索引查询啊。

间隙锁:

当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁)。

因为Query执行过程中通过过范围查找的话,他会锁定整个范围内所有的索引键值,即使这个键值并不存在。

间隙锁有一个比较致命的弱点,就是当锁定一个范围键值之后,即使某些不存在的键值也会被无辜的锁定,而造成在锁定的时候无法插入锁定键值范围内的任何数据。在某些场景下这可能会对性能造成很大的危害  

优化建议:

尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁。

合理设计索引,尽量缩小锁的范围

尽可能较少检索条件,避免间隙锁

尽量控制事务大小,减少锁定资源量和时间长度

尽可能低级别事务隔离

以上是mysql表锁和行锁区别是什么的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql表锁和行锁区别是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL 行锁和表锁的含义及区别详解

一、前言对于行锁和表锁的含义区别,在面试中应该是高频出现的,我们应该对MySQL中的锁有一个系统的认识,更详细的需要自行查阅资料,本篇为概括性的总结回答。 MySQL常用引擎有MyISAM和InnoDB,而InnoDB是mysql默认的引擎
2022-05-17

MySQL的表级锁,行级锁,排它锁和共享锁是什么

这篇文章主要介绍“MySQL的表级锁,行级锁,排它锁和共享锁是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL的表级锁,行级锁,排它锁和共享锁是什么”文章能帮助大家解决问题。前言先说下事
2023-07-02

mysql行锁和表锁怎么使用

MySQL中的行锁和表锁是用来控制并发访问数据库的机制,可以防止多个用户同时修改同一行或同一表的数据,保证数据的一致性和完整性。1. 行锁:行锁是对数据表中的某一行进行锁定,只有锁定的行才能被修改。行锁可以通过以下方式来使用:- 在需要锁定
2023-09-11

MySQL的表级锁,行级锁,排它锁和共享锁

目录前言一、表级锁&行级锁二、排它锁&共享锁1. 测试不同事务之间排它锁和共享锁的兼容性2. 测试行锁加在索引项上三、串行化隔离级别测试前言如果我们和面试官聊到事务的问题,怎么回答呢?先说下事务是什么,因为我们业务是比较复杂的,不可能一
2022-07-14

mysql中什么是行锁

mysql中什么是行锁?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、说明InnoDB的行锁是针对索引加的锁,不是针对记录加的锁。并且该索引不能失效,否则都会从行锁升级为
2023-06-15

Mysql行锁和表锁的实现示例

目录行锁和表锁加索引的影响注意事项常见面试题什么是表锁和行锁?它们有什么区别?mysql中的表锁有哪些类型?行锁是如何工作的?什么情况下会触发行锁?如何在MySQL中手动获取行锁?行锁和表锁在性能上有什么区别?如何优化数据库并发性能?举例说
Mysql行锁和表锁的实现示例
2024-08-19

synchronized加锁this和class的区别是什么

本篇内容介绍了“synchronized加锁this和class的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!synchroni
2023-06-21

java中悲观锁和乐观锁有什么区别

本篇文章给大家分享的是有关java中悲观锁和乐观锁有什么区别,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. An
2023-06-14

编程热搜

目录