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

Mic*_*lle 37 php mysql

我有一个包含3列的表 - id(pk),pageId(fk),name.我有一个PHP脚本,它将大约5000条记录转储到表中,大约一半是重复的,具有相同的pageId和名称.pageId和name的组合应该是唯一的.当我遍历php中的脚本时,防止重复项保存到表中的最佳方法是什么?

nic*_*ckf 109

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

ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);
Run Code Online (Sandbox Code Playgroud)

然后,当有重复时,你必须决定你想做什么.你应该:

  1. 忽略它?

    INSERT IGNORE INTO thetable (pageid, name) VALUES (1, "foo"), (1, "foo");
    
    Run Code Online (Sandbox Code Playgroud)
  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')
    
    Run Code Online (Sandbox Code Playgroud)
  3. 更新一些柜台?

    INSERT INTO thetable (pageid, name)
    VALUES (1, "foo"), (1, "foo")
    ON DUPLICATE KEY UPDATE (pagecount = pagecount + 1)
    
    Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,这是我在Stack Overlow上研究了一段时间的问题的绝佳答案. (6认同)

小智 5

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