错误的“键“ PRIMARY”的条目重复“ 284093””

时间:2018-09-10 09:28:11

标签: c# mysql .net

序言:这个问题对使用MySQL时收到wrong错误消息的人可能有用。证明错误消息是错误的。

在MySQL数据库(版本5.7.18)中,MyISAM表“ sensorhistory”具有类型为“ int(11)”的列“ id”,带有额外的“ 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

奇怪的是,当我在MySQL Workbench中执行SELECT max(id) FROM sensorhistory时,得到的最大值为284092,即比“重复项”小1。这证明错误消息是错误的。

我想知道这种奇怪的错误如何发生以及如何解决。

附录:

MySQL Workbench中的“分析表”显示该表已损坏: Found key at page 6585344 that points to record outside datafile 可以使用简单的Repair table sensorhistory进行修复 我仍然对表的损坏如何发生感兴趣。

顺便说一句:非常感谢所有似乎无法阅读文字的下载者:这并不是关于“重复键”的愚蠢问题,因为我展示了证明重复值的证据根本不存在!

附录208-09-12:

仅在1天,同一张表,同一条错误消息(只是带有新值)之后,错误再次发生。

1 个答案:

答案 0 :(得分:0)

Windows事件日志显示9月7日至9月11日之间发生了7次以上的崩溃(ID 6008:“先前的系统关闭是意外的”)。在这两种情况下,表传感器历史记录中的最新条目均在此类崩溃之前不久。

当机事故于9月11日上午结束。我不知道原因-其他人也在该测试机上工作。那时没有其他数据库问题了。

我得出结论,Windows突然崩溃导致数据库中出现一些不一致,然后导致该错误消息。