【问题标题】:Make MySQL table unique使 MySQL 表唯一
【发布时间】:2010-12-02 14:58:38
【问题描述】:

嘿,我创建了一个蜘蛛来爬取 PDF 文档并将文档中的每个单词记录到 MySQL 数据库中的表中。

显然,“the”、“and”、“or”等词在书中出现了很多次。

我只是想知道从表中删除重复值的最快方法是什么?

【问题讨论】:

    标签: php mysql unique duplicates


    【解决方案1】:
    delete from words where idcolumn not in
      (select min(idcolumn) 
       from words T2 
       where T2.plain = WordsTable.plain)
    

    如果您为找到的每个单词添加 (idcolumn, plain),则此方法有效。

    如果您没有 id 列 (pk),那么您可以使用 Anax 的解决方案。

    除了不插入重复项(codeburger 注释)外,您还可以在普通列上设置唯一索引。

    【讨论】:

    • 单词表称为'words',包含单词的字段是'plain'
    【解决方案2】:

    在 word 字段中选择 distinct,然后删除所有具有不同 id 的行?我不是子查询的大师,所以没有示例 atm :)

    【讨论】:

      【解决方案3】:

      您可以确保没有重复项进入表中,而不是删除重复项。

      假设你的表只有 2 个字段,id 和 word:

      INSERT INTO table SELECT null, 'word' FROM table WHERE NOT EXISTS (SELECT * FROM table WHERE word = 'word') LIMIT 1;
      

      只有当单词不存在时,才会将单词插入表中

      【讨论】:

        【解决方案4】:

        创建一个不为单词编制索引的表,并使用大量插入插入书中的所有单词(您也可以使用 LOAD DATA)。完成插入后,在 word 字段中添加新索引

        然后使用以下命令创建第二个表:

        CREATE TABLE newTable SELECT DISTINCT word FROM oldTable
        

        【讨论】:

          【解决方案5】:

          如果您可以重新运行脚本来填充数据库,您可以在“word”字段上添加一个唯一键,而不是 INSERT INTO 执行 REPLACE INTO。这将在添加重复字段之前删除记录的先前实例。这可能不是最有效的方法,但它相当简单。有关详细信息,请参见此处:

          http://dev.mysql.com/doc/refman/5.0/en/replace.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-09-27
            • 1970-01-01
            • 2015-04-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多