为了账号安全,请及时绑定邮箱和手机立即绑定

避免重复进入MySQL数据库的最佳方法

避免重复进入MySQL数据库的最佳方法

肥皂起泡泡 2019-07-13 10:14:26
避免重复进入MySQL数据库的最佳方法我有一个3列的表-id(PK),pageId(FK),name。我有一个php脚本,它将大约5000条记录转储到表中,其中大约一半是重复的,具有相同的pageId和名称。页面ID和名称的组合应该是唯一的。当我在php中循环脚本时,防止复制被保存到表中的最佳方法是什么?
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

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

ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);

当有重复的时候,你必须决定你想做什么。你应该:

  1. 无视它?

    INSERT IGNORE INTO thetable (pageid, name) VALUES (1, "foo"), (1, "foo");
  2. 覆盖以前输入的记录?

    INSERT INTO thetable (pageid, name, somefield)VALUES (1, "foo", "first")ON DUPLICATE KEY UPDATE (somefield = 'first')
    INSERT INTO thetable (pageid, name, somefield)VALUES (1, "foo", "second")ON DUPLICATE KEY UPDATE (somefield = 'second')
  3. 更新一些柜台?

    INSERT INTO thetable (pageid, name)VALUES (1, "foo"), (1, "foo")ON DUPLICATE KEY UPDATE (pagecount = pagecount + 1)


查看完整回答
反对 回复 2019-07-13
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

从MySQL的角度来看,您可以这样做

alter table YOURTABLE add unique index(pageId, name);

如果你的措辞是正确的,并且你想从php做它,你可以这样做。

$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
   }}

不管怎样,这对你来说都很好。


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 429 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信