**可以通过将现有索引修改为唯一索引或添加新索引来删除重复记录吗?**

Linda Hamilton
发布: 2024-10-28 09:43:29
原创
377 人浏览过

**Can You Remove Duplicate Records by Modifying an Existing Index to Unique or Adding a New One?**

使用唯一索引删除重复项

为了防止重复记录,常见的方法是在相关表列上创建唯一索引。然而,最近的一个错误导致创建了一个普通索引,从而允许重复项保留在一个包含 2000 万条记录的庞大表中。

问题: 是否会将现有索引修改为唯一或添加这些列的新唯一索引会删除重复记录,还是会因现有唯一条目而导致操作失败?

答案:

使用 IGNORE 添加唯一索引修饰符将删除重复记录:

<code class="sql">ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);</code>
登录后复制

但是,此修饰符在 MySQL 5.7.4 及更高版本中已弃用,从而导致错误。要避免此问题,可以采取以下步骤:

  1. 创建一个临时表来保存原始表中的数据:

    <code class="sql">CREATE TABLE tmp_data SELECT * FROM mytable;</code>
    登录后复制
  2. 截断原表:

    <code class="sql">TRUNCATE TABLE mytable;</code>
    登录后复制
  3. 在原表上创建唯一索引:

    <code class="sql">ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);</code>
    登录后复制
  4. 将数据复制回来到原始表中,同时忽略重复行:

    <code class="sql">INSERT IGNORE INTO mytable SELECT * from tmp_data;</code>
    登录后复制
  5. 删除临时表:

    <code class="sql">DROP TABLE tmp_data;</code>
    登录后复制

或者,添加唯一索引如果没有 IGNORE 修饰符将导致查询失败并出现错误 1062(重复键)。

以上是**可以通过将现有索引修改为唯一索引或添加新索引来删除重复记录吗?**的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!