Mysql⾃增列,并发插⼊时导致死锁的问题
背景:
有⼀张表需要每天定时迁移数据,采⽤的SQL如下(表名已调整)
inrt into data_cache ( customerID,organizationID,createTime)
打印机清洗喷头怎么操作步骤(
lect customerID,organizationID,createTime
from data
where DATE(createTime) <= DATE(?)
and autoIndex >= ?
and autoIndex <= ?
)
⼤体意思是根据autoIndex去判定那些数据需要迁移,在程序中已经分好区域了
⽐如1~100,101~200,201~300.
表结构如下:
婚姻法离婚规定两张表的数据表结构均⼀致,如:
CREATE TABLE `data` (
双曲线方程`customerID` varchar(50) NOT NULL COMMENT '客户编号',
`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
之前测试环境,甚⾄⽣产环境都是正常的代码,最近更新了数据库,出现了死锁异常如下:
inrt into data_cache ( customerID,organizationID,createTime)
(
lect customerID,organizationID,createTime
from data
where DATE(createTime) <= DATE(?)
and autoIndex >= ?
and autoIndex <= ?
)
关于元旦的作文Deadlock found when trying to get lock; try restarting transaction; nested exception is
问题:
Mysql插⼊居然报了死锁,还是两条插⼊并发,在数据源没有交集的情况下,并且之前⼀直是正常。百思不得其解广西大专学校
尝试解决:
移除掉缓存表中的autoIndex字段,取消⾃增以及⾮空。重试正常。
问题根源:
其实真正的问题涉及到Mysql对⾃增的设计。
详情可以参阅:
7级公务员 /JiangLe/p/6362770.html
⼤体就是数据库的模式对这种⾃增插⼊有3种设置。原有的环境以及⽣产为2,更新后改为1导致的。可以输⼊以下命令查看设置:
show global variables
innodb_autoinc_lock_mode 2
因为我们对连续没什么要求,所以采⽤性能最好的即可