MySQL:ALTERFIGNOTE表提供“完整性约束违反”

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (99)

我试图使用ALTERNOWERTABLE+一个唯一键从MySQL表中删除重复项。MySQL文档说:

忽略是对标准SQL的MySQL扩展。它控制ALTERTABLE的工作方式,如果新表中的唯一键上有重复项,或者启用严格模式时出现警告。如果未指定“忽略”,则如果发生重复键错误,将中止副本并回滚.。如果指定了“忽略”,则只有第一行用于唯一键上有重复项的行。其他冲突的行将被删除。不正确的值被截断到最接近匹配的可接受值。

当我运行查询时..。

ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)

我还是会搞错的#1062-“dupidx”的重复条目“blabla”.

提问于
用户回答回答于

IGNOREMySQL的关键字扩展似乎有一个InnoDB版本中的错误在某个版本的MySQL上。

可以始终将其转换为MyISAM,忽略-添加索引,然后再转换回InnoDB。

ALTER TABLE table ENGINE MyISAM;
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
ALTER TABLE table ENGINE InnoDB;

注意,如果有外键约束,这将无法工作,将不得不首先删除这些,并将它们添加回以后。

用户回答回答于

或者尝试old_alter_table=1(别忘了把它放回原处!)

扫码关注云+社区