栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用唯一索引删除重复项

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用唯一索引删除重复项

如果表中有重复项,则使用

ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);

该查询将失败,并显示错误1062(重复键)。

但是如果你用

IGNORE

-- (only works before MySQL 5.7.4)ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);

重复项将被删除。但是文档没有指定要保留的行:

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

从MySQL 5.7.4开始,ALTER TABLE的IGNORE子句被删除,使用它会产生错误。

(ALTER TABLE语法)

如果您的版本是5.7.4或更高版本-您可以:

  • 将数据复制到临时表中(从技术上讲,它不需要是临时表)。
  • 截断原始表。
  • 创建唯一索引。
  • 并将数据复制回

    INSERT IGNORE
    (仍然可用)。

    CREATE TABLE tmp_data SELECt * FROM mytable;
    TRUNCATE TABLE mytable;
    ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);
    INSERT IGNORE INTO mytable SELECt * from tmp_data;
    DROP TABLE tmp_data;

如果使用

IGNORE
修饰符,则执行
INSERT
语句时发生的错误将
被忽略。例如,如果不
IGNORE
使用,则复制表中现有
UNIQUE
索引或
PRIMARY KEY
值的行将导致重复键错误,并且该语句将中止。使用
IGNORE
,该行将被丢弃,并且不会发生错误。被忽略的错误会生成警告。

(插入语法)

另请参见:INSERT … SELECT语法以及IGNORE关键字和严格SQL模式的比较



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411674.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号