age*_*eur 5 mysql key duplicates
我在两列“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'
Run Code Online (Sandbox Code Playgroud)
该表有一个单列主键、2 个单列唯一索引(针对 user_id 和 project_id)以及 1 个针对 user_id 和 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`)
Run Code Online (Sandbox Code Playgroud)
此错误仅针对某些条目(很多条目)显示,并且始终是那些有问题的条目(例如上面显示的 87 和 1736 对)。
我尝试过寻找重复项,但没有找到。我能够在其中找到一些字段中带有“0”的条目,然后我删除了这些条目。未找到 NULL 字段。
我努力了:
alter ignore table ... add unique index (user_id, project_id),它没有发现重复项,抛出了关于 IGNORE 被弃用的警告,并且没有解决如何删除这些有问题的条目?
语句本身不可能delete产生重复键错误。至少,我想不出任何方法可以在未损坏的数据库中发生这种情况。毕竟,如果您要删除一个值,它就不能与另一个值冲突。
这就留下了发生其他事情的可能性。唯一合理的选择是桌面上的触发器。不幸的是,错误消息没有指定表名,但这是我能想到的唯一原因。