首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InnoDB表在更新时自动递增ID值

问InnoDB表在更新时自动递增ID值
EN

Stack Overflow用户
提问于 2018-01-03 12:56:47
回答 2查看 45关注 0票数 2

我有一个这样创建的mySQL表:

代码语言:javascript
复制
CREATE TABLE `LastSeen` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `ClassName` enum('LastSeen') CHARACTER SET utf8 DEFAULT 'LastSeen',
  `LastEdited` datetime DEFAULT NULL,
  `Created` datetime DEFAULT NULL,
  `LastSeenDate` datetime DEFAULT NULL,
  `DeviceID` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`),
  UNIQUE KEY `DeviceID` (`DeviceID`),
  KEY `ClassName` (`ClassName`)
) ENGINE=InnoDB AUTO_INCREMENT=2470 DEFAULT CHARSET=latin1;

我有一个这样的INSERT ON DUPLICATE KEY UPDATE语句:

代码语言:javascript
复制
INSERT INTO `LastSeen` (LastSeenDate, DeviceID) VALUES (#{DateTime}, #{DeviceID})
   ON DUPLICATE KEY UPDATE LastSeenDate = VALUES(LastSeenDate), DeviceID = VALUES(DeviceID)

当唯一键不存在时,将创建一条新记录。当唯一键确实存在时,记录被更新。但是,当更新记录时,自动递增ID会递增。因此,如果最后一条记录的ID为2000,则执行两次更新,然后执行插入操作,新记录的ID将为2003而不是2001。

我如何才能防止这种情况发生?由于更新的频率,表的ID将过早耗尽。

在问这个问题之前,我尝试这样做:How can I disable an auto-incrementing ID from updating on duplicate key update?,但密钥仍然会更新。我也试图在不同的网站上寻找答案,但没有找到令人满意的答案。

EN

回答 2

Stack Overflow用户

发布于 2018-01-03 13:11:10

INSERT ... ON DUPLICATE KEY UPDATE和REPLACAE ...都有这样的问题:gap of auto_increament value,使用bigint是更好的方式;

MySQL中的两个查询中gap of auto_increament value无法避免;

为了避免这个问题,使用UUID或UNIQUE KEY as PK可能会有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2018-01-03 13:02:39

在您的表中,您还有一个键将使系统插入而不是更新。DeviceID是唯一的,所以当您有两个相同的it时,它将插入一条新记录。我看不出有什么问题。

我希望这能有所帮助。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48071403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档