MySQL矛盾插入

时间:2015-11-19 15:06:25

标签: mysql insert auto-increment select-insert

我正在尝试插入我的一个表(来自同一个表)。我需要更改其中一个值,因此我尝试使用select作为已回答here进行插入。 我有一个自动增量pk,并希望新插入的pk继续计数。因此插入会导致向pk添加1。

INSERT INTO test.pp_publication_info
(id,
publication_fk,
template_fk,
allow_excel_upload)
SELECT 
id, 55, template_fk, allow_excel_upload
FROM pp_publication_info where id = "1";

我收到1062错误,这是KEY PRIMARY 1的重复条目。 我会这样,因为AI会给ID列+1。所以我查看是否可以添加ON DUPLICATE KEY UPDATE id。不幸的是,我把它放在查询中的位置并不重要。

所以简而言之:我可以这样INSERT,选择同时持有AI功能吗?如果是这样,我哪里出错,如果没有,有没有其他选择?

添加:创建我的表语句:

CREATE TABLE `pp_publication_info` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`publication_fk` int(10) unsigned NOT NULL,
`template_fk` int(10) unsigned DEFAULT NULL,
`allow_excel_upload` tinyint(1) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;

1 个答案:

答案 0 :(得分:1)

您的id列为AUTO_INCREMENT

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

这意味着数据库将在插入记录时为您生成标识符。因此,不要在该字段中插入值。它将自动填充。

这样的事情:

INSERT INTO test.pp_publication_info
  (publication_fk,
   template_fk,
   allow_excel_upload)
SELECT 
  55, template_fk, allow_excel_upload
FROM pp_publication_info where id = 1;

执行INSERT后,您会发现任何新记录的id列已填充序列中的下一个值。 (除非序列中存在任何空白,否则可能由于多种原因而发生。)