我必须从外部来源插入一些数据 我的php函数定期运行并获取结果&将这些插入表中。
通常会有结果保存。
所以它们又被插入了。
如何丢弃那些重复的结果,以便只输入新的结果&重复被丢弃。
答案 0 :(得分:1)
如果您可以修改数据库表的结构,最好的方法是为列或多个列添加UNIQUE INDEX,这些列一起唯一地标识单个条目。例如:
ALTER TABLE table
ADD UNIQUE INDEX name
(column_one
,column_two
);
如果表已包含重复记录,则更改尝试将导致错误。在这种情况下,您可以使用IGNORE:
ALTER IGNORE TABLE table
ADD UNIQUE INDEX name
(column_one
,column_two
);
请记住,创建不必要的大索引会导致:
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_name
和last_name
列的唯一组合,则应将person_id
作为主键并在(first_name, last_name)
上添加唯一约束。即使主键是唯一的,您也无法插入违反唯一约束的行。