删除查询抛出:错误1062密钥的重复条目“X-Y”;但表中没有重复

时间:2015-11-05 01:03:34

标签: mysql duplicates key

我在两列上有一个复合唯一键,“user_id”& “PROJECT_ID”。

当我尝试在单行或多行上运行DELETE查询时,出现错误。

ERROR 1062: 1062: Duplicate entry '87-1736' for key 'index_on_user_id_and_project_id'

SQL Statement:
DELETE FROM `members` WHERE `id`='39142'

该表具有单列主键,2个单列唯一索引(对于user_id和project_id),以及user_id和project_id上的1个复合唯一索引。数据库中没有外键。

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL DEFAULT '0',
  `project_id` int(11) NOT NULL DEFAULT '0',
  `created_on` datetime DEFAULT NULL,
  `mail_notification` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `index_on_user_id_and_project_id` (`user_id`,`project_id`),
  KEY `index_members_on_user_id` (`user_id`),
  KEY `index_members_on_project_id` (`project_id`)

此错误仅显示某些条目(很多条目),并且始终是那些有问题的条目(例如上面显示的87和1736对)。

我尝试过查找重复项,但没有找到。我能够在字段中找到一些带有“0”的条目,我删除了这些条目。没有找到NULL字段。

我尝试过:

  • 寻找重复项,找不到。
  • 在索引字段中查找零或NULL值,删除但未解决
  • 删除复合唯一索引,没解决。
  • alter ignore table ... add unique index (user_id, project_id),它没有发现重复,发出警告关于IGNORE被弃用,并没有解决

如何删除这些有问题的条目?

2 个答案:

答案 0 :(得分:1)

delete语句本身不可能生成重复的键错误。至少,我想不出任何方式可以在一个完整的数据库中发生这种情况。毕竟,如果你删除一个值,它就不会与另一个值发生冲突。

这样就有可能发生其他事情。唯一合理的选择是桌面上的触发器。遗憾的是,错误消息并没有指定表名,但这是我能够轻易想到的唯一原因。

答案 1 :(得分:0)

在我将目标表(t1)绑定到历史记录表(t1_hist)之前,我已经碰到了这个。 t1_hist由对t1更改的触发器填充(任何添加/更改/删除)。一旦我从t1_hist中删除了不需要的记录,我就能从t1中删除。这需要从t1_hist表中删除第二遍,因为它记录了我从t1删除的内容。

简单地说,我的是:DELETE FROM t1 WHERE customer_number> 50000;

同样的错误。从t1_hist开始(和最后一次)相同,那就没问题了。