MySQL - 忽略插入错误:重复条目

neo*_*eon 75 php mysql insert

我在PHP工作.

请问将新记录插入到具有唯一字段的DB中的正确方法是什么.我正在批量插入大量记录,我只想插入新的记录,我不希望重复条目有任何错误.

有没有办法首先进行SELECT并查看INSERT之前是否已经存在该条目 - 并且只有当SELECT不返回记录时才进行INSERT?我希望不是.

我想以某种方式告诉MySQL忽略这些插入而没有任何错误.

谢谢

zom*_*bat 160

如果您希望在存在重复记录时不执行任何操作,则可以使用INSERT ... IGNORE语法.

如果要使用具有相同键的新记录覆盖旧记录,则可以使用REPLACE INTO语法.

或者,如果要在遇到重复时更改记录,则可以使用INSERT ... ON DUPLICATE KEY UPDATE语法.

编辑:以为我会添加一些例子.

例子

假设您有一个以tbl两列命名的表,id并且value.有一个条目,id = 1和value = 1.如果您运行以下语句:

REPLACE INTO tbl VALUES(1,50);
Run Code Online (Sandbox Code Playgroud)

您仍然有一条记录,id = 1 value = 50.请注意,整个记录首先是DELETED,然后重新插入.然后:

INSERT IGNORE INTO tbl VALUES (1,10);
Run Code Online (Sandbox Code Playgroud)

操作成功执行,但未插入任何内容.你仍然有id = 1和值= 50.最后:

INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;
Run Code Online (Sandbox Code Playgroud)

您现在拥有一条id = 1且值= 200的记录.

  • "如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告." - 从上面的插入链接 (8认同)
  • 但是警告不会引发错误,因此您的脚本将继续执行.从手册:如果使用IGNORE关键字,则执行INSERT语句时发生的错误将被视为警告.例如,如果没有IGNORE,则复制表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句将中止.使用IGNORE时,仍未插入行,但未发出错误. (2认同)