首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL: ALTER IGNORE TABLE提供“完整性约束冲突”

MySQL: ALTER IGNORE TABLE提供“完整性约束冲突”
EN

Stack Overflow用户
提问于 2011-11-09 00:07:42
回答 3查看 28K关注 0票数 49

我正在尝试使用ALTER IGNORE table +唯一键来删除MySQL表中的重复项。MySQL文档中写道:

SQL是对标准

的MySQL扩展。它控制如果新表中存在唯一键上的重复项,或者在启用严格模式时出现警告,ALTER TABLE如何工作。如果未指定IGNORE,则会在发生重复键错误时中止并回滚复制。如果指定了IGNORE,则在唯一键上具有重复项的行中只使用第一行。其他冲突行将被删除。不正确的值将被截断为最匹配的可接受值。

当我运行查询时...

代码语言:javascript
复制
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field)

..。我仍然收到错误#1062 -键'dupidx'的重复条目'blabla‘。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-09 00:31:00

MySQL的IGNORE关键字扩展似乎在某些版本的MySQL上有一个bug in the InnoDB version

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

代码语言:javascript
复制
ALTER TABLE table ENGINE MyISAM;
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
ALTER TABLE table ENGINE InnoDB;

请注意,如果您有外键约束,这将不起作用,您必须先删除这些约束,然后再添加它们。

票数 97
EN

Stack Overflow用户

发布于 2013-07-31 22:28:29

或者尝试设置会话old_alter_table=1 (不要忘记将其设置回去!)

请参阅:http://mysqlolyk.wordpress.com/2012/02/18/alter-ignore-table-add-index-always-give-errors/

票数 27
EN

Stack Overflow用户

发布于 2011-11-09 01:02:57

问题是您试图索引的字段中有重复的数据。在添加唯一索引之前,您需要删除有问题的重复项。

一种方法是执行以下操作:

代码语言:javascript
复制
   CREATE TABLE tmp_table LIKE table;
   ALTER IGNORE TABLE tmp_table ADD UNIQUE INDEX dupidx (field);
   INSERT IGNORE INTO tmp_table SELECT * FROM table;
   DROP TABLE table;
   RENAME TABLE tmp_table TO table;

这允许您仅将唯一数据插入到表中

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8053447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档