0

我正在尝试插入我的一张表(来自同一张表)。我需要更改其中的 1 个值,因此我尝试使用此处回答的 select 插入。我有一个自动增量 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 错误,这是1KEY PRIMARY 的重复条目。我会认为,由于人工智能,它会 +1 ID 列。所以我检查了是否可以添加一个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;
4

1 回答 1

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任何新记录的列都已被序列中的下一个值填充。(除非序列中有任何间隙,这可能由于多种原因而发生。)

于 2015-11-19T15:09:51.473 回答