相关文章推荐
温暖的面包  ·  Android 下拉框里面字体右对齐怎么写 ...·  10 月前    · 
有胆有识的小蝌蚪  ·  金华市人民政府外事与侨务办公室2012年鉴·  10 月前    · 
独立的树叶  ·  NoNullAllowedException ...·  1 年前    · 
调皮的草稿纸  ·  给定两个有序的整形数组,找出里边的相同元素 ...·  1 年前    · 
一直单身的手链  ·  带格式文本html ...·  1 年前    · 
小百科  ›  [首推]概要所述MySQL中罕见的螺丝刀-腾讯云开发者社区-腾讯云
mysql mysql数据库
憨厚的大熊猫
1 年前
作者头像
全栈程序员站长
0 篇文章

[精选]详细介绍MySQL中常见的锁

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 全栈程序员必看 > [精选]详细介绍MySQL中常见的锁

[精选]详细介绍MySQL中常见的锁

作者头像
全栈程序员站长
发布 于 2022-07-19 10:48:23
238 0
发布 于 2022-07-19 10:48:23
举报

大家好,又见面了,我是全栈君。

一、死锁示例

考虑下面一个 MySQL 死锁的示例:

有如下一张表:

CREATE TABLE `test` (
`id` int(20) NOT NULL,
`name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

表中有如下数据:

mysql> SELECT * FROM test;
+----+------+
| id | name |
+----+------+
|  1 | 1    |
|  5 | 5    |
| 10 | 10   |
| 15 | 15   |
| 20 | 20   |
| 25 | 25   |
+----+------+
6 rows in set (0.00 sec)

当 数据库 的隔离级别为Repeatable Read或Serializable时,我们来看这样的两个并发事务(场景一):

[精选]详细介绍MySQL中常见的锁

上面两个并发事务一定会发生死锁(这里之所以限定 RR和Serializable 两个隔离级别,是因为只有这两个级别下才会有 间隙锁/临键锁 ,而这是导致死锁的根本原因,后面会详细分析)。

我们再来看另外一个并发场景(场景二):

[精选]详细介绍MySQL中常见的锁

在这个并发场景下,两个事务均能成功提交,而不会有死锁。

在上面的示例中, 我们发现,select … for update虽然可以用于解决数据库的并发操作,但在实际项目中却不建议使用,原因是当查询条件对应的记录不存在时,很容易造成死锁。而造成死锁的原因和MySQL的锁机制有关。 本文将详细介绍常见的七种锁机制,了解了这些锁机制之后就能理解造成场景一死锁的根本原因以及场景一和场景二差异的原因。

二、MySQL的七种锁

  1. 行锁(Record Locks)
  2. 间隙锁(Gap Locks)
  3. 临键锁(Next-key Locks)
  4. 共享锁/排他锁(Shared and Exclusive Locks)
 
推荐文章
温暖的面包  ·  Android 下拉框里面字体右对齐怎么写 - CSDN文库
10 月前
有胆有识的小蝌蚪  ·  金华市人民政府外事与侨务办公室2012年鉴
10 月前
独立的树叶  ·  NoNullAllowedException 類別 (System.Data) | Microsoft Learn
1 年前
调皮的草稿纸  ·  给定两个有序的整形数组,找出里边的相同元素 - fight-ing - 博客园
1 年前
一直单身的手链  ·  带格式文本html 直接复制粘贴,通过JS将带格式的文本复制到剪贴版的两种方法..._weixin_39997037的博客-CSDN博客
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号