iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >update导致死锁
  • 789
分享到

update导致死锁

数据库mysqljava 2023-09-09 18:09:45 789人浏览 安东尼
摘要

update delete 操作,如果走的索引,对索引和主键索引加行锁 如果没有走索引,锁整张表。 不开启事务,Mysql本身也会加锁 一般mysql在执行CREATE,ALTER,INSE

update delete 操作,如果走的索引,对索引和主键索引加行
如果没有走索引,锁整张表。

不开启事务Mysql本身也会加锁
一般mysql在执行CREATE,ALTER,INSERT等命令时会自动加锁

在对数据进行更新操作时
如果update没用到索引,直接锁表,不会死锁
如果update用到了索引,根据索引查询顺序进行索引加锁。因此可能会加锁顺序不一致导致死锁。
select语句会加读锁 (共享锁),只能读,不能对这条数据更新删除

间隙锁
select语句如果是范围查询,会锁住这一段范围共享读锁,对这个区间加锁,成为间隙锁。

解决办法:
1、禁用index_merge
在查询的时候只会走一个索引,不会都走。如果不禁用index_merge。会先走id1索引,再走id2索引,将查询结果求交集。

把两个索引设置成联合索引

先使用select查询出要更新的数据主键,再根据主键进行更新。

select * from t where d=5 for update,触发了什么锁?
可重复读隔离级别下:由于d没有索引,因此实际上是加入表锁,InnoDB的表锁形式为next-key lock(主键行锁+间隙锁),即会给数据库中的记录都加上行锁,还同时加上n+个间隙锁(n为已有记录数)。确保无法再插入新的记录。在一行行扫描的过程中,不仅将给行加上了行锁,还给行两边的空隙也加上间隙锁。间隙锁和行锁合称next-key lock,每个next-key lock是前开后闭区间。我们的表t初始化以后,如果用select * from t for update要把整个表所有记录锁起来,就形成了7个next-key lock,分别是 (-∞,0]、(0,5]、(5,10]、(10,15]、(15,20]、(20, 25]、(25, +supremum]。

读已提交下:语句执行完后,只有符合d=5的行会有行锁

来源地址:https://blog.csdn.net/weixin_44857939/article/details/129163184

您可能感兴趣的文档:

--结束END--

本文标题: update导致死锁

本文链接: https://www.lsjlt.com/news/401749.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • update导致死锁
    update delete 操作,如果走的索引,对索引和主键索引加行锁 如果没有走索引,锁整张表。 不开启事务,mysql本身也会加锁 一般MYSQL在执行CREATE,ALTER,INSE...
    99+
    2023-09-09
    数据库 mysql java
  • waitgroup.Wait() 导致死锁
    小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《waitgroup.Wait() 导致死锁》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到...
    99+
    2024-04-04
  • 多线程update导致的mysql死锁问题处理方法
    最近想起之前处理过的一个mysql 死锁问题,是在高并发下update批量更新导致的,这里探讨一下发生的原因,以及解决办法; 发生死锁的sql语句如下,其中where条件后的字段是有复合索引的。 update t_push_mes...
    99+
    2023-09-06
    数据库 java 开发语言 mysql死锁问题 mysql
  • chan chan 构造导致死锁
    问题内容 我试图通过编写一小段代码来理解 Go 中的 chan chan 构造,如下所示,我希望 3 个工作子例程处理 10 个作业。每个工作子例程都有自己的通道,在其中接收要处理的“...
    99+
    2024-02-06
  • mysql insert导致死锁的案例介绍
    本篇内容介绍了“mysql insert导致死锁的案例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!两...
    99+
    2024-04-02
  • MySQL UPDATE语句是否会导致表被锁定?
    MySQL UPDATE语句是否会导致表被锁定? MySQL 是一个流行的关系型数据库管理系统,广泛用于各种应用程序中。在数据库操作中,UPDATE 语句用于更新表中的数据。但是,一个...
    99+
    2024-03-15
    mysql update 锁定
  • 单线程会导致死锁你知道吗
    死锁从文字理论上说明的是两个线程,可以认为是两个人A和B,A在等待B完成某件事情,B又在等待A完成某件事情。 那如果在代码中,单线程的某个函数,有没有可能导致死锁呢? 我们看下面的...
    99+
    2024-04-02
  • 简单的通道并行示例,导致死锁
    大家好,我们又见面了啊~本文《简单的通道并行示例,导致死锁》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面...
    99+
    2024-04-04
  • update.where无索引导致MySQL死锁问题解决
    目录引言死锁的日志分析日志复盘总结引言 随着我被拉入一个新的群聊“生产环境死锁问题排查解决”,打破了午后的悠然惬意,点开群聊秒送了一个648超级大礼包(业务不正常,死锁异常日志输出),领导怒斥并要...
    99+
    2024-04-02
  • redis链接高并发导致锁死怎么解决
    当Redis遇到高并发的情况可能会导致锁死,可以考虑以下几种解决办法:1. 使用分布式锁:通过使用分布式锁,可以将锁的控制权交给其他...
    99+
    2023-08-23
    redis
  • 怎么解决死锁导致网站无法访问故障
    这篇文章主要介绍了怎么解决死锁导致网站无法访问故障,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  如何解决死锁导致网站无法访问故障  问题...
    99+
    2024-04-02
  • 浅谈Java由于不当的执行顺序导致的死锁
    我们来讨论一个经常存在的账户转账的问题。账户A要转账给账户B。为了保证在转账的过程中A和B不被其他的线程意外的操作,我们需要给A和B加锁,然后再进行转账操作, 我们看下转账的代码: ...
    99+
    2024-04-02
  • 电脑更新windows KB3001652补丁后导致计算机被锁死怎么办?
    在本月的“补丁星期二”那天,微软照例为该公司旗下的许多产品发布了补丁。但是在这其中,有一个编号为KB3001652的问题补丁的计算机。根据官网给出的细节 当然,微软的反应也算相当迅速了。在看到来...
    99+
    2023-06-11
    KB3001652补丁 电脑蓝屏 windows补丁 windows KB3001652 计算机 电脑
  • 为什么在这种情况下主协程会被阻塞从而导致死锁?
    在PHP中,主协程被阻塞导致死锁的情况是比较常见的。主协程在执行过程中,如果遇到阻塞的操作,比如网络请求、IO操作或者等待其他协程结果等,如果没有合适的处理方式,就有可能导致死锁的发生...
    99+
    2024-02-09
  • 如何理解MYSQL RC模式insert update可能死锁的情况
    本篇文章给大家分享的是有关如何理解MYSQL RC模式insert update可能死锁的情况,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 ...
    99+
    2024-04-02
  • 死锁(JAVA)
    死锁在多线程代码中是非常严重的BUG,一旦代码中出现死锁就会导致线程卡死。 当单个线程连续两次对同一个对象进行加锁操作时,如果该锁是不可重入锁就会发生死锁(线程卡死) 两个线程两把锁,如果出现这种情况也是会发生死锁:线程t1已经获取了锁A,...
    99+
    2023-12-22
    java java-ee
  • Redis使用不当导致应用卡死怎么办
    本篇内容介绍了“Redis使用不当导致应用卡死怎么办”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先说下...
    99+
    2024-04-02
  • MySql类型转换导致行锁升级为表锁的示例
    小编给大家分享一下MySql类型转换导致行锁升级为表锁的示例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在MySql的写语句中,给表列赋值与表类型不符合时,MySql底层的优化器发挥作用...
    99+
    2024-04-02
  • redis使用不当导致应用卡死bug怎么办
    这篇文章主要介绍redis使用不当导致应用卡死bug怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象刚开始当测试抱怨环境响应...
    99+
    2023-06-20
  • 为什么下面的 go 程序会出现死锁错误“致命错误:所有 goroutine 都在睡眠 - 死锁!”
    在Go语言中,死锁是一个常见的错误,当所有的goroutine都处于睡眠状态时,就会出现致命错误:"致命错误:所有goroutine都在睡眠 - 死锁!"。这种情况通常发生在多个gor...
    99+
    2024-02-09
    go语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作