【问题标题】:How can I mass insert multiple rows in MySQL with two unique columns?如何在 MySQL 中批量插入具有两个唯一列的多行?
【发布时间】:2011-12-27 01:44:52
【问题描述】:

我正在开发网页索引机器人并使用 php 和 mysql。其中一张表将存储网页列表。我希望该表具有基于整数的 id 列(以便我可以更快地将其加入其他表,以便其他表可以引用它而不将完整的 url 存储在列中),但我也想要 @ 987654322@ 列保持唯一。

出现这个问题的原因是,如果我的脚本读取包含 250 个链接的网页,我不确定将它们添加到网页表而不创建重复项的最佳方法。我可以循环我找到的 250 个链接并查询每个链接的表以确保它们不存在,然后插入存在的链接 - 这至少需要 250 个查询。

但是,如果我可以让 mysql 强制 url 成为唯一列,我可以简单地使用所有链接执行一个 insert ignore 语句。这将防止现有记录在添加新记录时被重复。如果我有这种类型的表,其中的整数 id 列是唯一的/主要的并且是自动递增的,我还可以指定 url 列是唯一的吗?

  id (auto inc)     url                            added
----------------------------------------------------------------------
  1                 http://site.com/page-a/        2010-01-01 01:23:34
  2                 http://site.com/page-b/        2010-01-01 01:23:34
  3                 http://site.com/page-c/        2010-01-01 01:23:34

我想到的另一个选项是将 url 设置为唯一的主键,然后使用 php / mysql 语句手动增加 id 列:

url (unique, primary)         id          added
-------------------------------------------------------------
http://site.com/page-a/       1           2010-01-01 01:23:34
http://site.com/page-b/       2           2010-01-01 01:23:34
http://site.com/page-c/       3           2010-01-01 01:23:34

似乎这样做的好处是允许 mysql 强制执行唯一的 url 列(从而允许我的 insert ignore 方法),还允许我加入一个整数。唯一奇怪的是必须依靠我的脚本来添加和增加 id 列,但如果没有更好的选择,我可能愿意这样做。

我有什么选择?

【问题讨论】:

    标签: php mysql database database-design unique


    【解决方案1】:

    是的,您可以使 url 列独一无二。所以一个大的INSERT IGNORE INTO ... (...) VALUES (...), (...), ... 就可以完成这项工作。

    不要url设为主要!您的主键应该是id auto_increment 字段;只需在 url 字段上创建一个唯一索引。

    不要忘记INSERT IGNORE 是特定于 MySQL 的,所以如果您也计划支持例如 PostgreSQL,那么您的代码将无法工作。

    【讨论】:

      【解决方案2】:

      您可以拥有任意数量的UNIQUE 索引,但只有一个PRIMARY 一个(这就是它被称为主索引的原因)。

      然而,MySQL 中的自动增量仅适用于 PRIMARY 键。所以你应该有你的idAUTO_INCREMENTPRIMARY,以及你的urlUNIQUEPRIMARY 也暗示 UNIQUE 所以你不需要也不应该将两者都添加到一个列中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-07
        • 1970-01-01
        • 2020-05-11
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        • 2011-07-28
        相关资源
        最近更新 更多