更新:经过大量痛苦的研究后,我发现问题实际上是什么,并更新标题以使其更有意义。我将在下面给出答案。
不幸的是,我无法复制给我这个问题的查询,因为它属于我的公司,因此我必须非常具体地保留我的问题。
我有INSERT INTO ... SELECT
查询返回此错误:
Duplicate entry <gobbledygook> for key 'idx_<tablename>'
最后的表名是正确的名称,但它之前有一个奇怪的idx_
前缀,它不是我正在使用的任何表的一部分。什么是idx
?它与information_schema
有什么关系吗?
更新:显然,我需要澄清一些事情:名称中没有idx
列。
答案 0 :(得分:1)
“idx_”是索引名称的通用前缀。
许多人的索引不允许该索引引用的列值的重复值。
答案 1 :(得分:1)
当我试图解决这个问题时,大量的网络搜索没有透露太多,但我终于弄明白了(JohnH的回答帮助我做到了这一点)。
我终于发现“idx”不是由MySQL创建的,而是其他人给索引的名称。我从来没有遇到过一个以前不是键的索引的唯一性约束,所以我不知道那个错误来自哪里。
此命令显示所有索引:
SHOW INDEX FROM <tablename>
我能够看到此密钥的非唯一设置为0.
为了解决这个问题,我只需删除索引并重新创建它,而不添加唯一性约束。
DROP INDEX idx_<tablename> ON <tablename>;
ALTER TABLE <tablename> ADD INDEX idx_<tablename> (<comma-separated columns>);
是否删除唯一性约束是一个好主意仍有待观察,但它也超出了这个问题的范围。
答案 2 :(得分:0)
在我的情况下,即使被索引的列没有,唯一索引也有重复的条目。我只能认为这是由错误引起的。解决方案是
如果要删除重新创建的索引,则在执行此操作时不会给任何机会插入重复的条目,这一点很重要。这就是为什么我停止了写入数据库的服务的原因。