Неверное сообщение «повторяющаяся запись 284093 для ключа primary».

Преамбула: этот вопрос может быть полезен людям, которые получают сообщения об ошибках wrong при использовании MySQL. Дается доказательство того, что сообщение об ошибке неверно.

В базе данных MySQL (версия 5.7.18) таблица MyISAM «sensorhistory» имеет столбец «id» типа «int (11)» с дополнительным «auto_increment». Данные вставляются из приложения, написанного на C#. Конечно, запрос INSERT НЕ записывает столбец id напрямую. Вот для чего нужен auto_increment. Таблица содержит еще 30 полей типов float и varchar, соответственно, плюс DateTime(3). Параметризованный запрос длинный.

Я получаю следующее сообщение об ошибке:

Duplicate entry '284093' for key 'PRIMARY' at MySql.Data.MySqlClient.MySqlStream.ReadPacket() at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId) at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) at MySql.Data.MySqlClient.MySqlDataReader.NextResult() at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() at DataStorage.SensorHistoryDatastore.StoreSensorHistory(IReadOnlyList'1 _reports, Boolean _canRetry) in C:\Users\bernhard.hiller\SVN\Product-SW\trunk\C_DataStorage\PhysicalContainers\SensorHistoryDatastore.cs:line 84

Как ни странно, когда я выполняю SELECT max(id) FROM sensorhistory в MySQL Workbench, я получаю максимальное значение 284092, то есть на 1 меньше, чем «повторяющаяся запись». Это доказательство того, что сообщение об ошибке неверно.

Хотелось бы узнать, как может возникнуть такая странная ошибка и как ее исправить.

Дополнение:

«Анализ таблицы» в MySQL Workbench показал, что таблица повреждена: Found key at page 6585344 that points to record outside datafile Его можно было отремонтировать с помощью простого Repair table sensorhistory. Меня все еще интересует, как могло произойти такое повреждение таблицы.

Между прочим: большое СПАСИБО всем тем ДАУНВОТЕРАМ, которые, кажется, не могут прочитать текст: это не чертовски глупый вопрос о «дублированном ключе», потому что я показал доказательство того, что повторяющееся значение не существует. вообще!

Приложение 208-09-12:

Ошибка повторилась всего через 1 день, та же таблица, то же сообщение об ошибке (только с новым значением).

Не могли бы вы показать сам запрос INSERT?

ontrack 10.09.2018 11:57
3
1
289
1

Ответы 1

Журнал событий Windows показал более 7 сбоев в период с 7 по 11 сентября (идентификатор 6008: «Предыдущее завершение работы системы было неожиданным»). Самая новая запись в таблице sensorhistory была в обоих случаях незадолго до такого сбоя.

Катастрофы закончились утром 11 сентября. Я не знаю причины - над этой тестовой машиной работают и другие люди. Тогда проблем с базой данных больше не было.

Я пришел к выводу, что внезапный сбой Windows вызвал некоторую несогласованность в базе данных, что затем привело к появлению этого сообщения об ошибке.

Другие вопросы по теме