【发布时间】: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