重复输入' n'对于密钥' primary',在重复时更改ID

时间:2016-02-16 09:55:27

标签: mysql database duplicates

我有一个MySQL表,ID列设置为auto_increment。该表已包含一些值。

我需要导入大约4000个新行,在某些情况下,它们具有表中已存在的相同ID,因此MySQL返回此错误:

  

错误代码:1062。重复输入' 7'关键' PRIMARY'

我该如何处理?

下面我发布了一段涉及我需要导入的文件的代码:

INSERT INTO `wp_posts`
     (`ID`,`post_author`,`post_date`,`post_date_gmt`,`post_content`,`post_title`,`post_excerpt`,`post_status`,...)
  VALUES
     (7,1,'2015-04-24 11:19:41'....);

[等等4000行]

我需要的是ID值会自动相同更改。

3 个答案:

答案 0 :(得分:3)

如果您想在ID匹配时更新现有行,请尝试添加ON DUPLICATE KEY UPDATE子句:

INSERT INTO wp_posts (ID, post_author, post_date, post_date_gmt, post_content,
                      post_title, post_excerpt, post_status, ...)
VALUES (7, 1, '2015-04-24 11:19:41', ...)
ON DUPLICATE KEY UPDATE
    post_author=VALUES(post_author), post_date=VALUES(post_date),
    post_date_gmt=VALUES(post_date_gmt), post_content=VALUES(post_content),
    post_title=VALUES(post_title), post_excerpt=VALUES(post_excerpt),
    post_status=VALUES(post_status), ...

答案 1 :(得分:0)

正如您所说,ID字段为autoincrement。 因此,您不需要在插入期间强制id列。您的插入查询将autogenerate非重复的唯一ID

INSERT INTO wp_posts (post_author,post_date,post_date_gmt,post_content,post_title,post_excerpt,post_status,...) VALUES (1,'2015-04-24 11:19:41'....)

答案 2 :(得分:0)

据我了解您的担忧,您可以使用:

INSERT INTO wp_post (ID,post_author,post_date,post_date_gmt,post_content,post_title,post_excerpt,post_status,...) VALUES (7,1,'2015-04-24 11:19:41'....) ON DUPLICATE KEY UPDATE ID = 0;

并检查id是否具有auto_increment属性。