码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • mysql在update,非主键索引更新引起死锁


    1.mysql存储引擎:


    Innodb: 支持事务,更新时采用行级锁,并发性高
    MyISAM: 不支持事务,更新时表锁,并发性差
    因此使用Innodb才会发生死锁,从mysql5.6开始默认引擎Innodb

    2.update更新过程


    行级锁并不是直接锁记录,而是锁索引,如果一条SQL语句用到了主键索引,mysql会锁住主键索引;如果一条语句操作了非主键索引,mysql会先锁住非主键索引,再锁定主键索引。反之,
    如果操作用到了主键索引会先在主键索引上加锁,然后在其他索引上加锁。
    如果没有用到索引,则进行全表扫描,锁表。
    当where条件为非主键索引,执行update时,会经过一下步骤:
    1)先获取非主键索引的行级锁;
    2)由数据库基本原理可知,where条件为非主键索引时,会发生回表查询,进而再获得主键索引的行级锁;
    3)更新完毕,进行事务提交。

    根据上述步骤可知,对于非主键索引的update操作,其加锁过程并非原子操作,而且是分别需要获取不同索引的行级锁,可能会产生死锁:
    假如,一条update语句用到主键索引和非主键索引,则获取锁的顺序是先获取主键索引,再获取非主键索引;而同时,另一条update语句只用到非主键索引,则获取锁的顺序是先获取非主键索引,再获取主键索引,二者正好发生在步骤 1)和 2)中间,则会造成锁。

    3.解决方案


    where条件加主键索引
    先上锁查询查出来,在根据主键更新
    逐条更新

    行级锁是锁索引:

    由于MySQL的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但是如果是使用相同的索引键,是会出现锁冲突的

  • 相关阅读:
    ChatGPT实战-构建文章分析AI聊天机器人
    SpringBoot之静态资源规则与定制化
    一文看懂Oracle 19c OCM认证考试(需要Oracle OCP证书)
    VPN创建连接 提示错误 628: 在连接完成前,连接被远程计算机终止。
    修改了字符集,好多软件不能正常使用,所以,慎重。。。。
    axios封装
    项目管理:项目经理一定要避开这四大误区
    华为CSE框架的一些知识点
    全链路压测(10):测试要做的准备工作
    【Docker】02-安装mysql
  • 原文地址:https://blog.csdn.net/susu1083018911/article/details/126645526
  • 最新文章
  • 凌晨告警排查记:一次AWS EBS磁盘IO利用率100%的真相
    Linux 系统中定位与设置 JAVA_HOME 目录
    程序员逼格拉满!ccstatusline:让你的 Claude Code 状态栏直接封神!
    深度学习进阶(二十三)偏置型 RPE
    OpenCode狗都不用
    你的Agent API还在裸奔?从认证到沙箱,我用FastAPI搭了几道防线
    13、PushbackInputStream和StreamTokenizer的源码分析和使用方法详细分析
    上周热点回顾(5.11-5.17)
    .NET 8 Web开发入门(五):构建盾牌——数据验证与全局异常处理
    [深度学习] 大模型学习8上-推理部署框架llama.cpp与Ollama使用指北
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号