gpt4 book ai didi

php - 如何在 MySQL 中批量插入具有两个唯一列的多行?

转载 作者:行者123 更新时间:2023-11-29 09:00:57 25 4
gpt4 key购买 nike

我正在开发一个网页索引机器人并使用 php 和 mysql。其中一个表将用于存储网页列表。我希望该表有一个基于整数的 id 列(以便我可以更快地将其连接到其他表,并且其他表可以引用它而无需将完整的 url 存储在列中),但是我还希望 url 列保持唯一。

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

但是,如果我可以让 mysql 强制将 url 强制为唯一列,我可以简单地对所有链接执行一个 insertignore 语句。这将防止在添加新记录时重复现有记录。如果我有这种类型的表,其中的整数 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 列(从而允许我的 insertignore 方法),并且还允许我加入一个整数。唯一奇怪的事情是必须依赖我的脚本来添加和增加 id 列,但如果没有更好的选择,我可能愿意这样做。

我有什么选择?

最佳答案

是的,您可以使 url 列唯一。因此,一个大的 INSERT IGNORE INTO ... (...) VALUES (...), (...), ... 就可以完成这项工作。

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

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

关于php - 如何在 MySQL 中批量插入具有两个唯一列的多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com