首页 > 数据库 > 文库 > 正文

INSERT语句引发的死锁实例解析

2022-07-24 18:01:26
字体:
来源:转载
供稿:网友
  这篇文章主要介绍“INSERT语句引发的死锁实例分析”,在日常操作中,相信很多人在INSERT语句引发的死锁实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”INSERT语句引发的死锁实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
 
  为了故事的顺利发展,我们新建一个用了无数次的hero表:
 
  CREATE TABLE hero (
      number INT AUTO_INCREMENT,
      name VARCHAR(100),
      country varchar(100),
      PRIMARY KEY (number),
      UNIQUE KEY uk_name (name)
  ) Engine=InnoDB CHARSET=utf8;
  然后向这个表里插入几条记录:
 
  INSERT INTO hero VALUES
      (1, 'l刘备', '蜀'),
      (3, 'z诸葛亮', '蜀'),
      (8, 'c曹操', '魏'),
      (15, 'x荀', '魏'),
      (20, 's孙权', '吴');
  现在hero表就有了两个索引(一个唯一二级索引,一个聚簇索引),示意图如下:
 
  读过《MySQL是怎样运行的:从根儿上理解MySQL》的小伙伴肯定知道,INSERT语句在正常执行时是不会生成锁结构的,它是靠聚簇索引记录自带的trx_id隐藏列来作为隐式锁来保护记录的。
 
  但是在一些特殊场景下,INSERT语句还是会生成锁结构的,我们列举一下:
 
   待插入记录的下一条记录上已经被其他事务加了gap锁时
 
  每插入一条新记录,都需要看一下待插入记录的下一条记录上是否已经被加了gap锁,如果已加gap锁,那INSERT语句应该被阻塞,并生成一个插入意向锁。

(编辑:错新网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选