DELETE 查询抛出:错误 1062 Duplicate entry 'X-Y' for key;但 table 中没有重复项

DELETE Query throws: Error 1062 Duplicate entry 'X-Y' for key; but no duplicates in table

我在两列上有一个复合唯一键,"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'

table有一个单列主键,2个单列唯一索引(user_id和project_id),user_id和1个复合唯一索引project_id。数据库中没有外键。

  `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 对)。

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

我试过了:

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

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

这留下了发生其他事情的可能性。唯一合理的选择是 table 上的触发器。不幸的是,错误消息没有指定 table 名称,但这是我很容易想到的唯一原因。

我之前遇到过这个问题,当时我将目标 table (t1) 与历史 table (t1_hist) 相关联。 t1_hist 由对 t1 更改的触发器填充(任何 add/change/delete)。一旦我从 t1_hist 中删除不需要的记录,我就能够从 t1 中删除。这需要从 t1_hist table 中进行第二遍删除,因为它记录了我从 t1 中删除的内容。

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

同样的错误。首先(和最后)从 t1_hist 做同样的事情,然后没问题。