我试图使用ALTER IGNORE TABLE +一个唯一键从MySQL表中删除重复项。 MySQL文档说:MySQL:ALTER IGNORE TABLE给出“完整性约束违规”
IGNORE是对标准SQL的MySQL扩展。它控制着ALTER TABLE如何在新表中的唯一键上存在重复或如果启用严格模式时发生警告。如果未指定IGNORE,则复制将被中止并在发生重复键错误时回退。如果指定IGNORE,则只有第一行用于具有唯一键上的重复项的行。其他冲突的行被删除。不正确的值将被截断为最接近的匹配可接受值。
当我运行查询...
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)
...我仍然得到错误#1062 - 重复项 '布拉布拉' 关键 'dupidx'。
在链接到InnoDB的错误有一个建议的解决方法,以第一次运行'设置会话old_alter_table = 1;'这工作了!我。 – Peter
感谢彼得 - 这似乎现在正在为我工作。不知道这个问题 - 我的开发机器是mariadb,但是当我不得不在生产上运行时(mysql 5.5)遇到了这个问题。这stackoverflow救了我的一天! – spidie
这很可能是我见过的Stack Overflow上最糟糕的答案。更改存储引擎本身就是一个重要的任务,即使是中等大小的表格也是如此。这三个查询可能会将数据库服务器锁定数小时。这不是一个解决方案。 – Mikkel