MySQL 在服务重启时为表重置 AUTO_INCREMENT

标签 mysql innodb auto-increment

我有 MySQL (InnoDB) 数据库,当服务重新启动时,它会重置它的自动增量值。这会导致重复的主键插入失败。

直到最近才发生这种情况。当一位同事不小心从数据库中删除了一个表时,它就开始发生了。单个表已从备份中恢复,但结构略有变化(整数替换为 double ,vchars 变大了一点),现在每次重新启动 mysql 服务时自动增量都会重置。

表的创建模式是这样的:

CREATE TABLE `caseattachments` (
  `CaseAttachmentId` double NOT NULL AUTO_INCREMENT,
  `CaseId` double DEFAULT NULL,
  `CaseEventId` double DEFAULT NULL,
  `OriginalFileName` varchar(768) DEFAULT NULL,
  `OriginalFileMimeType` varchar(768) DEFAULT NULL,
  `OriginalFileSize` double DEFAULT NULL,
  `NewFileName` varchar(768) DEFAULT NULL,
  `Created` datetime DEFAULT NULL,
  PRIMARY KEY (`CaseAttachmentId`)
) ENGINE=InnoDB AUTO_INCREMENT=6589 DEFAULT CHARSET=latin1;

为什么每次重新启动服务时自动增量都会被重置?

更新

对此的修复相当简单(在我的例子中)我删除了表并重建它以使用整数作为 Id。这似乎解决了问题。我不确定如果我有一张大 table 会怎样解决问题,希望我不需要找出答案。

最佳答案

它在这里:

AUTO_INCREMENT=6589

您的索引已重置为 6589,并将重复执行直到达到可用的数字,要么将其删除,要么确保其 1+ 是表中的最后一个 ID。

因此,如果最后一行的 ID 为 98120,则需要将其更改为

AUTO_INCREMENT=98121

还是我说的很明显?

如果这是当前的问题并且您需要修复实时表,请执行以下操作:

ALTER TABLE caseattachments AUTO_INCREMENT = 98121

关于MySQL 在服务重启时为表重置 AUTO_INCREMENT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6097507/

相关文章:

MySQL AUTO_INCREMENT 按组使用 InnoDB 或替代品

mysql - 如何在MySQL中正确的GROUP BY?

mysql - `UPDATE ... WHERE ... ` InnoDB 多行锁定

mysql - OpenJPA 和 MySQL 自动增量

import - 如何使用主键作为自动增量将文本文件导入表

连接表上的 MySQL 外键问题

mysql - SQL女士2005 : Select a ID for a particular date where that date lies between fromdate and Todate

MYSQL - 排序依据和限制 : Different result when using variable or constant

php - 了解您必须处理/扩展的新网络系统

php - 使用 WHERE IN 或 join 进行双重查询