RR 隔离级别下删除不存在数据导致 【死锁】

        如果删除索引的数据不存在,会出现一个间隙锁,区间(左边最近第一个值, 右边最近第一个值), 间隙锁之间是不会冲突的,只有往间隙中插入数据的操作,才会被阻塞。

重温间隙锁目的

间隙锁的目的是为了防止幻读,其主要通过两个方面实现:

(1)防止间隙内有新数据被插入

(2)防止已存在的数据,更新成间隙内的数据(例如防止numer=3的记录通过update变成number=5)

死锁场景流程复盘:开启事务,任务数据先执行批量删除操作,然后执行插入操作, 出现死锁。

数据表


CREATE TABLE `task` (
  `uid` int(11) NOT NULL,
  `task_id` int(11) NOT NULL,
  `state` int(11) DEFAULT NULL,
  `sub_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`uid`,`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='任务数据';
  1.  空表的情况下, 删除操作都可以,从提示看没有改动数据

   2.  开始分别插入一些数据, 左边阻塞了,然后我们看锁表的信息

  3.  查看INNODB_LOCKS 表

suprenum 表示超过索引中的最大值,也就是说 两个事务的间隙锁 范围都是  (-∞, +∞),左边 执行insert 的事务正在等待右边释放锁,这时候如果右边事务也执行insert 就死锁了……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
事务是SQL中用于执行一系列操作的单个逻辑单位。隔离级别是指在并发环境下,不同事务之间相互隔离的程度。常见的隔离级别包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。 阻塞是指一个事务正在等待另一个事务释放资源,以便继续执行。当一个事务占用了某个资源,并且其他事务需要访问该资源时,后者就会被阻塞,直到前者释放资源。这可以通过锁定机制来实现。 死锁是指两个或多个事务相互等待对方释放资源,导致所有事务都无法继续执行的状态。死锁通常发生在多个事务同时竞争多个资源的情况下。为了解决死锁问题,可以使用死锁检测和死锁解除机制。 在SQL Server中,事务的隔离级别可以通过设置事务的级别或使用锁提示来控制。锁提示是指在查询中显式指定锁定行为以影响事务隔离级别和锁定行为。SQL Server还提供了一些系统存储过程和函数,用于分析当前查询中的锁信息。 综上所述,SQL中的事务、隔离级别、阻塞和死锁是与并发处理相关的重要概念。通过合理设置事务的隔离级别和处理并发访问冲突,可以确保数据的一致性和完整性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SQL Server学习笔记之事务、锁定、阻塞、死锁用法详解](https://download.csdn.net/download/weixin_38516804/13704270)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [数据库的读读事务也会产生死锁](https://download.csdn.net/download/weixin_38731479/14906993)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Sql Server事务+隔离级别+阻塞+死锁](https://blog.csdn.net/baidu_34007305/article/details/111468603)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值