首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免mysql数据库中重复条目的最佳方法

问避免mysql数据库中重复条目的最佳方法
EN

Stack Overflow用户
提问于 2010-02-08 13:36:51
回答 4查看 73.2K关注 0票数 45

我有一个包含3列的表- id (pk),pageId (fk),name。我有一个php脚本,它转储大约5000条记录到表中,大约一半是重复的,具有相同的pageId和名称。pageId和name的组合应唯一。当我在php中循环脚本时,最好的方法是防止重复项被保存到表中?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-08 13:59:16

第一步是在表上设置一个唯一的键:

代码语言:javascript
复制
ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);

然后你必须决定当有重复的时候你想要做什么。您是否应该:

  1. 是否忽略它?

在表格(pageid,name)值(1,"foo")中插入IGNORE,(1,"foo");

  • Overwrite之前输入的记录?)

在重复密钥更新时插入表格(pageid,name,somefield)值(1,"foo","first")在重复密钥更新(somefield = 'first')时插入表格(pageid,name,somefield)值(1,"foo","second")在重复密钥更新时插入(pageid,name,somefield)值(1,“foo”,“'second')

  • Update”)

在重复密钥更新(pagecount = pagecount + 1)时插入到表(pageid,name)值(1,"foo"),(1,"foo")中

票数 120
EN

Stack Overflow用户

发布于 2010-02-08 13:55:45

您也可以使用mysql忽略该错误: INSERT ignore INTO TABLE ...它将忽略键错误,跳过该插入并转到下一个。

票数 5
EN

Stack Overflow用户

发布于 2010-02-08 13:45:15

从mysql点,您可以执行以下操作

代码语言:javascript
复制
alter table YOURTABLE add unique index(pageId, name);

如果您的措辞是正确的,并且您想在php中执行此操作,则可以执行此操作

代码语言:javascript
复制
$already_done = array();
foreach ($records as $record)
{
   $unique_hash = md5($record['name'].$record['pageId']);
   if (!in_array($unique_hash, $already_done))
   {
      $already_done[] = $unique_hash;
      // sql insert here
   }
}

无论哪种方式,这些都会让你感觉很好。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2219786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档