【问题标题】:Don't duplicate content in a mysql database不要在 mysql 数据库中复制内容
【发布时间】:2014-05-15 17:56:25
【问题描述】:

我从每 1500 万次获取的 JSON 中输入信息到数据库中。 但我不想在每次解析 JSON 时都重复内容。 我可以通过“链接”列比较条目。

我的解决方案是这样的:

$query="SELECT link FROM guests WHERE link=$comparison LIMIT 1";
$result=mysql_query($query);
$row = mysql_fetch_row($result);

if ($row < 1 ){
ENTER THE NEW CONTENT
}

但我认为这不是最好的解决方案。 每次右转都这样做不是很轻吗?

谢谢。

【问题讨论】:

  • 在表 guests 的列 link 上设置唯一约束。然后,当您解析 JSON 并将其保存在数据库中时,请使用 INSERT IGNORE INTOREPLACE INTO
  • 如果您不想重复内容,一种选择是将列设为唯一。当然还有其他解决方案。
  • @DaveChen 还有ON DUPLICATE KEY UPDATE
  • 感谢大家!戴夫,我似乎可以在此列上设置唯一约束,因为我已经在 id 字段上有一个主键。正常吗?
  • 请在链接列上设置唯一约束。例如,ALTER TABLE guests ADD UNIQUE (link)。如果表已经有重复项,那么只需使用ALTER IGNORE 来删除表中的所有重复项。

标签: php mysql sql duplicates


【解决方案1】:

如前所述,您最好的选择是在“链接”列上使用 UNIQUE 约束。

至于如何在不首先检查“does-this-exist”查询的行数的情况下插入一行,方法是:

插入忽略 这不会插入具有重复“链接”列的行。但是,它不会抛出错误,因此请注意重复操作会静默失败。

【讨论】:

  • 谢谢,但似乎不可能在链接 slumns 上使用唯一约束,因为我的 id 列是主键。对吧?
  • 一个表中可以有多个唯一列。您可以同时拥有主键和唯一约束。
  • 谢谢约翰。我还没有找到解决办法。但我刚刚意识到文本字段不能设置为唯一。所以我可以为我的案例使用独特的解决方案......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
相关资源
最近更新 更多