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是什么意思
因为我们对连续没什么要求,所以采⽤性能最好的即可