当非簇索引(non cluster index)记录被锁定时 相关的簇索引(cluster index)记录也需要被锁定才能完成相应的操作
再分析一下发生问题的两条SQL语句 就不难找到问题所在了
当 update TSK_TASK set STATUS_ID= UPDATE_TIME=now () where STATUS_ID= and MON_TIME
假设 update TSK_TASK set STATUS_ID= UPDATE_TIME=now () where ID in ( ) 几乎同时执行时 本语句首先锁定簇索引(主键) 由于需要更新STATUS_ID的值 所以还需要锁定KEY_TSKTASK_MONTIME 的某些索引记录
这样第一条语句锁定了KEY_TSKTASK_MONTIME 的记录 等待主键索引 而第二条语句则锁定了主键索引记录 而等待KEY_TSKTASK_MONTIME 的记录 在此情况下 死锁就产生了
笔者通过拆分第一条语句解决死锁问题
先查出符合条件的ID select ID from TSK_TASK where STATUS_ID= and MON_TIMEdate_sub(now() INTERVAL minute) 然后再更新状态 update TSK_TASK set STATUS_ID= where ID in (… )
至此 死锁问题彻底解决
lishixinzhi/Article/program/MySQL/201311/29601
【mysql死锁怎么解密 mysql死锁会自动释放吗】mysql死锁怎么解密的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysql死锁会自动释放吗、mysql死锁怎么解密的信息别忘了在本站进行查找喔 。
推荐阅读
- 快手直播的其他方式,快手直播的其他方式是什么
- jquery单机时间,jquery计时器代码
- 能联机的赛车竞速游戏免费,可以联机的赛车单机游戏
- 抖音小程序怎么展示流量,抖音小程序流量主怎么赚钱
- php封装数据库函数 php封装数据库函数是什么
- redis一致性哈希,redis 哈希一致性
- 怎么在下载sap,怎么在下载软件
- kpl直播视频虎牙,kpl直播虎牙直播
- php数据库优化三范式 php查询优化和存储优化