防止基于列(MySQL)的重复行?

时间:2011-11-06 10:44:56

标签: mysql duplicates duplicate-removal

我正在构建一个经常从其他API更新其本地数据库的系统。我将Python脚本设置为cron作业,他们的工作几乎没有。

然而,唯一的缺陷是脚本需要很长时间才能完成。当它们第一次运行时,过程很快,但在此之后需要将近20分钟才能完成从第三方API收到的200k +项目列表。

问题是脚本首先从数据库中获取所有行,并将它们必须唯一的列值添加到列表中。然后,在浏览API结果时,它会检查列表中是否存在当前项必须是唯一值。这会使真正重,因为列表中的值超过200k。

有没有办法检入INSERT - 查询,根据单个列,没有重复?如果有,只是不添加新行。

任何帮助将不胜感激=)

1 个答案:

答案 0 :(得分:5)

如果向必须包含UNIQUE值的列添加UNIQUE键,当您插入违反此约束的行时,MySQL将会抱怨。

然后你有三个选择:

  • INSERT IGNORE将尝试插入,如果发生违规,则不执行任何操作。
  • INSERT ... ON DUPLICATE KEY UPDATE会尝试插入,如果发生违规,请将行更新为新值
  • REPLACE将尝试插入,如果发生违规,请删除有问题的现有行,然后插入新行。