如何在mysql中丢弃重复记录的插入?

时间:2010-11-27 15:01:58

标签: php mysql

我必须从外部来源插入一些数据 我的php函数定期运行并获取结果&将这些插入表中。

通常会有结果保存。
所以它们又被插入了。

如何丢弃那些重复的结果,以便只输入新的结果&重复被丢弃。

5 个答案:

答案 0 :(得分:1)

如果您可以修改数据库表的结构,最好的方法是为列或多个列添加UNIQUE INDEX,这些列一起唯一地标识单个条目。例如:

ALTER TABLE table ADD UNIQUE INDEX namecolumn_onecolumn_two);

如果表已包含重复记录,则更改尝试将导致错误。在这种情况下,您可以使用IGNORE:

ALTER IGNORE TABLE table ADD UNIQUE INDEX namecolumn_onecolumn_two);

请记住,创建不必要的大索引会导致:

  • 占用更多磁盘空间
  • 写入查询速度较慢(INSERT,UPDATE,DELETE)

http://dev.mysql.com/doc/refman/5.1/en/create-index.html (页面描述了创建索引的另一种方法,但也引用了ALTER TABLE)

答案 1 :(得分:0)

我知道这听起来很傻,但要确定如何检测重复项并且不要插入它们。

这取决于您的数据集。如果您有唯一字段,最简单的方法是在数据库中的该字段上设置唯一索引,即主键,并且数据库不允许插入副本。只需检查您的错误,如果您遇到重复的密钥错误,请忽略您所期望的内容。

答案 2 :(得分:0)

关于主键的问题,如果您明智地定义主键,则不必处理重复项,因为您没有主键。

答案 3 :(得分:0)

假设您在表上设置了主键,INSERT IGNORE ...命令就是这样做的。

如果您还没有主键,请将其设置为您的记录的名称或ID,其中具有相同名称/ ID将表示重复数据。

答案 4 :(得分:0)

所有关系数据库都允许在一行上使用主键和唯一约束。

因此,如果您的PERSON表格中包含person_id列以及first_namelast_name列的唯一组合,则应将person_id作为主键并在(first_name, last_name)上添加唯一约束。即使主键是唯一的,您也无法插入违反唯一约束的行。