一尘不染

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

mysql

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


阅读 291

收藏
2020-05-17

共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)

2020-05-17