Mysql自增列,并发插入时导致死锁的问题

更新时间:2023-06-12 00:02:24 阅读: 评论:0

Mysql⾃增列,并发插⼊时导致死锁的问题
背景:
  有⼀张表需要每天定时迁移数据,采⽤的SQL如下(表名已调整)
inrt into  data_cache ( customerID,organizationID,createTime)
(
lect  customerID,organizationID,createTime
from  data
stephen gatelywhere  DATE(createTime) <= DATE(?)
and  autoIndex >= ?
and  autoIndex <= ?
)
⼤体意思是根据autoIndex去判定那些数据需要迁移,在程序中已经分好区域了
cnca⽐如1~100,101~200,201~300.
表结构如下:replica
两张表的数据表结构均⼀致,如:
CREATE TABLE `data` (
`customerID` varchar(50) NOT NULL COMMENT '客户编号',teenslovemoney
`organizationID` varchar(50) DEFAULT NULL COMMENT '机构号',
`createTime` timestamp NULL DEFAULT current_timestamp() COMMENT '创建时间',
`lastModifiedDatetime` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '最近修改时间',
`autoIndex` int(11) NOT NULL AUTO_INCREMENT COMMENT '索引',
江苏卫视春晚节目单
`modifyDate` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '修改⽇期',
PRIMARY KEY (`customerID`),
KEY `autoIndex` (`autoIndex`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=468DEFAULT CHARSET=utf8
bowler>有道翻译官方下载之前测试环境,甚⾄⽣产环境都是正常的代码,最近更新了数据库,出现了死锁异常如下:
inrt into  data_cache ( customerID,organizationID,createTime)
(
lect  customerID,organizationID,createTime
from  data2014广东高考作文
where  DATE(createTime) <= DATE(?)
and  autoIndex >= ?
and  autoIndex <= ?
)
Deadlock found when trying to get lock; try restarting transaction; nested exception is
问题:
    Mysql插⼊居然报了死锁,还是两条插⼊并发,在数据源没有交集的情况下,并且之前⼀直是正常。百思不得其解
尝试解决:
    移除掉缓存表中的autoIndex字段,取消⾃增以及⾮空。重试正常。
问题根源:
    其实真正的问题涉及到Mysql对⾃增的设计。
  详情可以参阅:
  /JiangLe/p/6362770.html
  ⼤体就是数据库的模式对这种⾃增插⼊有3种设置。原有的环境以及⽣产为2,更新后改为1导致的。可以输⼊以下命令查看设置:
show global variables
设计师如何谈单innodb_autoinc_lock_mode 2gment是什么意思
因为我们对连续没什么要求,所以采⽤性能最好的即可

本文发布于:2023-06-12 00:02:24,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/141867.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:问题   设置   死锁   导致
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图