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

2022-08-30 11:16:19

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


答案 1

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

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)
    

答案 2

您也可以忽略mysql的错误:将忽略插入到表中...它将忽略密钥错误,跳过该插入并转到下一个插入。


推荐