表结构-- ----------------------------
-- Table structure for t_ds
-- ----------------------------
DROP TABLE IF EXISTS `t_ds`;
CREATE TABLE `t_ds` (
  `id` bigint(64) NOT NULL AUTO_INCREMENT,
  `deviceId` varchar(50) DEFAULT NULL,
  `eventId` varchar(50) DEFAULT NULL,
  `eventTime` bigint(64) DEFAULT NULL,
  `logInfoId` bigint(64) DEFAULT NULL,
  `statusCode` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_ds` (`deviceId`,`eventId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;插入语句INSERT INTO t_ds(deviceId, eventId, eventTime, logInfoId, statusCode)
SELECT deviceId, eventId, eventTime, id, statusCode FROM t_loginfo
WHERE (deviceId, eventId, eventTime) in (
  SELECT
                deviceId, eventId, MAX(eventTime)
        FROM
                t_loginfo
        GROUP BY deviceId, eventId
)执行结果[SQL]INSERT INTO t_ds(deviceId, eventId, eventTime, logInfoId, statusCode)
SELECT deviceId, eventId, eventTime, id, statusCode FROM t_loginfo
WHERE (deviceId, eventId, eventTime) in (
  SELECT
                deviceId, eventId, MAX(eventTime)
        FROM
                t_loginfo
        GROUP BY deviceId, eventId
)受影响的行: 5504
时间: 2.882s
查看数据库发现插入成功,一共5504条记录,所有行的序列ID也是正常,但是这时候的自增已经到了8192, 这时候插入一条新纪录的ID为8192。不知道为啥出现了这样的问题,加个 limit x,1 的话 insert 一条一条的插入又不会出现错误,但是这样把多条查询结果一起插进去的话就会出现。我做了一些小测试,不知道是否有用。
我把表清空,自增恢复到1,然后运行下面语句
INSERT INTO t_ds(deviceId, eventId, eventTime, logInfoId, statusCode)
SELECT deviceId, eventId, eventTime, id, statusCode FROM t_loginfo
WHERE (deviceId, eventId, eventTime) in (
  SELECT
                deviceId, eventId, MAX(eventTime)
        FROM
                t_loginfo
        GROUP BY deviceId, eventId
)
limit 0,1
这时候 AUTO_INCREMENT=2,
再修改为 limit 1,2,这时候插入2条,实际记录为3条,最后一条记录ID为3,但是 AUTO_INCREMENT=5
再修改为 limit 3,3,这时候插入3条,实际记录为6条,最后一条记录ID为7,但是 AUTO_INCREMENT=8
再修改为 limit 6,4,这时候插入4条,实际记录为10条,最后一条记录ID为11,但是 AUTO_INCREMENT=15
再修改为 limit 10,5,这时候插入5条,实际记录为15条,最后一条记录ID为19,但是 AUTO_INCREMENT=22运行下来整个ID自增序列是这样的1 2 3 5 6 7 8 9 10 11 15 16 17 18 19
另外,在插入数量大的时候,一次插入5000条和一次插入6000条,AUTO_INCREMENT竟然都是8192,感觉好诡异了