【问题标题】:MySQL: duplicate entry for key 'PRIMARY'MySQL:键“PRIMARY”的重复条目
【发布时间】:2015-09-13 11:15:50
【问题描述】:

我有下表:

+------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows     | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation       | Checksum | Create_options | Comment |
+------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+
| logs | MyISAM |      10 | Dynamic    | 34823016 |            237 |  8285517176 | 281474976710655 |    357365760 |       192 |       34823017 | 2015-06-17 21:37:54 | 2015-06-26 15:49:21 | NULL       | utf8_general_ci |     NULL |                |         |
+------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+

mysql> show columns from logs;
+--------------------+------------------+------+-----+---------+----------------+
| Field              | Type             | Null | Key | Default | Extra          |
+--------------------+------------------+------+-----+---------+----------------+
| ID                 | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| ReceivedAt         | datetime         | YES  |     | NULL    |                |
| DeviceReportedTime | datetime         | YES  |     | NULL    |                |
| Facility           | smallint(6)      | YES  |     | NULL    |                |
| Priority           | smallint(6)      | YES  |     | NULL    |                |
| FromHost           | varchar(60)      | YES  |     | NULL    |                |
| Message            | text             | YES  |     | NULL    |                |
| InfoUnitID         | int(11)          | YES  |     | NULL    |                |
| SysLogTag          | varchar(60)      | YES  |     | NULL    |                |
| CustomerID         | bigint(20)       | YES  |     | NULL    |                |
| NTSeverity         | int(11)          | YES  |     | NULL    |                |
| Importance         | int(11)          | YES  |     | NULL    |                |
| EventSource        | varchar(60)      | YES  |     | NULL    |                |
| EventUser          | varchar(60)      | YES  |     | NULL    |                |
| EventCategory      | int(11)          | YES  |     | NULL    |                |
| EventID            | int(11)          | YES  |     | NULL    |                |
| EventBinaryData    | text             | YES  |     | NULL    |                |
| MaxAvailable       | int(11)          | YES  |     | NULL    |                |
| CurrUsage          | int(11)          | YES  |     | NULL    |                |
| MinUsage           | int(11)          | YES  |     | NULL    |                |
| MaxUsage           | int(11)          | YES  |     | NULL    |                |
| EventLogType       | varchar(60)      | YES  |     | NULL    |                |
| GenericFileName    | varchar(60)      | YES  |     | NULL    |                |
| SystemID           | int(11)          | YES  |     | NULL    |                |
| processid          | varchar(60)      | NO   |     |         |                |
| checksum           | int(11) unsigned | NO   |     | 0       |                |
+--------------------+------------------+------+-----+---------+----------------+

我正在尝试插入一行:

INSERT INTO logs (ID, ReceivedAt, DeviceReportedTime, Facility,
 Priority, FromHost, Message, InfoUnitID, SysLogTag, CustomerID,
 NTSeverity, Importance, EventSource, EventUser, EventCategory,
 EventID, EventBinaryData, MaxAvailable, CurrUsage, MinUsage,
 MaxUsage, EventLogType, GenericFileName, SystemID)
VALUES ('34823017',
        '2015-06-26T15:06:02+03:00',
        '2015-06-26T15:06:38+03:00',
        '22',
        '6',
        'po-sv-bus-01v',
        'type=SYSCALL msg=audit(1435320388.132:831638): arch=c000003e syscall=4 success=yes exit=0 a0=7f4bc8616ca0 a1=7f4bd1c10c00 a2=7f4bd1c10c00 a3=0 items=1 ppid=1 pid=3489 auid=286786658 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 ses=204 tty=(none) comm="rsyslogd" exe="/sbin/rsyslogd" subj=unconfined_u:system_r:syslogd_t:s0 key="power-abuse"',
        '1',
        'audit: ',
        '',
        '',
        '',
        '',
        '',
        '',
        '',
        '',
        '',
        '',
        '',
        '',
        '',
        '',
        '');

我得到了错误:

错误 1062 (23000):键 'PRIMARY' 的重复条目 '34823017'

虽然没有重复条目:

mysql> select * from logs where ID = '34823017';

Empty set (0.00 sec)

有人可以帮我吗?

【问题讨论】:

  • 你是否在没有单引号的情况下运行它,因为 select * from logs where ID = 34823017;
  • 这种情况下重启mysql服务再检查一遍
  • 你有一个auto_increment ID,为什么要手动设置ID
  • 如果您的索引损坏,MyISAM 表可能会出现此类问题。 grokbase.com/t/mysql/mysql/114w8qh68y/…
  • 正如@PaulF 所说,您的 ID 字段不仅是您的主键,而且您将其设置为自动增量,这意味着您不应该在该字段中插入值或修改其中的值场地。从您的查询中删除它应该可以解决您的问题。

标签: mysql primary-key


【解决方案1】:

不要手动设置 ID。例如,您可以传递 null,然后它会自动递增

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-18
    • 2012-08-24
    • 2017-02-17
    • 2016-04-16
    • 1970-01-01
    • 2012-07-23
    • 2013-09-30
    相关资源
    最近更新 更多