我正在将搜索词插入数据库,当我运行它进行测试时,我看到重复数据插入到数据库中?知道为什么会这样吗?这是我的插入函数的示例 -
*更新 - 我正在插入,它不再作为重复插入,但我试图让重复工作 - 并且重复更新每次2的流行度?我在这里有什么不对?
$entryDate = date("c");
$insertsearchquery="insert into article_searches (termSafe,entryDate) values (\"$termSafe\",\"$entryDate\") on duplicate key update popularity=popularity+1";
mysql_query($insertsearchquery);
答案 0 :(得分:1)
为避免重复,您需要unique
索引或约束(这些是真的相同)或主键。假设您的意思是重复项都是由两个值引起的,您可以通过创建唯一索引来阻止插入:
create unique index idx_table2_termSafe_entryDate on table2(termSafe, entryDate);
我会评论表名是代码中的参数似乎很奇怪。通常,具有相同结构的多个表是数据库设计不佳的标志。在大多数情况下,最好有一个大表而不是许多小表。
答案 1 :(得分:1)
我知道您提出了另一个问题,但是由于您正在编写搜索系统,请考虑添加一个列计算您插入该密钥的时间的列:
popularity (smallint unsigned not null default 1)
并添加
on duplicate key update popularity=popularity+1
在插入查询的末尾(这需要列termSafe和entryDate上的主键)
答案 2 :(得分:0)
除非您在要插入的表中设置了主键,否则将无法阻止插入重复数据。
请参阅:http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html