MySQL сбрасывает AUTO_INCREMENT для таблицы при перезапуске службы - PullRequest
1 голос
/ 23 мая 2011

У меня есть база данных 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;

Почему автоматическое приращение может сбрасываться при каждом перезапуске службы?

ОБНОВЛЕНИЕ

Исправление для этого было довольно тривиальным (в моем случае), я опустил таблицу и перестроил ее, чтобы использовать целые числа для идентификаторов.Это, кажется, решило проблему.Я не уверен, что бы исправить, если бы у меня был большой стол, надеюсь, мне не нужно будет это выяснять.

1 Ответ

1 голос
/ 23 мая 2011

Это здесь:

AUTO_INCREMENT=6589

Ваш индекс был сброшен до 6589 и будет повторяться до тех пор, пока не достигнет доступного числа, либо уберите его, либо убедитесь, что его 1+ последний идентификатор в таблице.

Так что, если последний ряд имел идентификатор 98120, вам нужно изменить его на

AUTO_INCREMENT = 98121

Или я утверждаю очевидное?

если это текущая проблема, и вам нужно исправить работающую таблицу, выполните:

ALTER TABLE caseattachments AUTO_INCREMENT = 98121
...