【问题标题】:Fixing unindexed database MySQL [duplicate]修复未索引的数据库 MySQL [重复]
【发布时间】:2016-01-15 00:05:42
【问题描述】:

编辑:我添加了一个响应,其中包含解决我的问题的链接和命令。为了让任何未来的读者对他们的重复行的未索引表感到绝望,您可以在下面或上面的链接中找到答案。

我的数据库中有一张有点搞砸的桌子。它是重复的行,具有完全相同的信息(包括 id)。

是否有一个查询可以用来删除这些重复的 ID,但只有一个? 我想先在这里检查我的答案,如果我删除这个表,我需要整个周末才能再次导入它(它很大)......

我正在考虑做

DELETE FROM tickets t1, tickets t2 WHERE t1.id = t2.id limit 1;

我不确定这是否可行... 谢谢!

【问题讨论】:

  • 你不确定是什么意思。你试过了吗?
  • 你复制了多少行?您可以创建表的备份并删除所有重复的行,然后使用备份表再次添加它们。你真的应该使用唯一的主键来避免这个问题。
  • 如果只有一行具有该 id 将不起作用 - 您将删除这一行。

标签: php mysql database indexing


【解决方案1】:

要查找id 列中的所有重复项,您可以尝试:

select `id` 
   from `tickets`
   group by `id`
   having count(`id`)>1;

我会在 gui(Heidi 等)中尝试此操作 ~ 然后您可以围绕此进行删除操作,无论是在 gui 中手动还是通过直接查询。

【讨论】:

    【解决方案2】:

    正如Oceans 所说的

    CREATE TEMPORARY TABLE tmp_tickets AS SELECT DISTINCT * FROM tickets;
    DELETE FROM tickets;
    INSERT INTO tickets SELECT * FROM tmp_tickets;
    DROP TABLE tmp_tickets;
    

    【讨论】:

    • 那是我的备份解决方案,幸好我找到了一个更简单的方法来通过一个简单的命令来解决这个问题。
    【解决方案3】:

    我设法通过Remove duplicate rows in MySQL 此处找到的解决方案解决了这个问题。为了节省您单击链接的时间,查询看起来像这样

    ALTER IGNORE TABLE jobs
    ADD UNIQUE INDEX idx_name (site_id, title, company);
    

    它删除了所有重复的索引,减一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 2019-02-15
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 2016-03-17
      • 2015-05-21
      相关资源
      最近更新 更多