MySQL 矛盾插入
MySQL contradiction insert
我正在尝试插入我的 table 之一(来自同一个 table)。我需要更改其中 1 个值,因此我尝试插入 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 错误,这是 1
的 KEY PRIMARY 的重复条目。
我本来会因为人工智能而将 ID 列 +1。所以我查看是否可以添加 ON DUPLICATE KEY UPDATE id
。不幸的是,我把它放在查询中的什么地方并不重要。
所以简而言之:我可以INSERT
这样,在select的同时保持AI功能吗?如果是这样,我哪里出错了,如果不是,还有其他选择吗?
添加:创建我的语句 table:
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;
您的 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
列已被序列中的下一个值填充。 (除了序列中的任何间隙,这可能由于多种原因而发生。)
我正在尝试插入我的 table 之一(来自同一个 table)。我需要更改其中 1 个值,因此我尝试插入 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 错误,这是 1
的 KEY PRIMARY 的重复条目。
我本来会因为人工智能而将 ID 列 +1。所以我查看是否可以添加 ON DUPLICATE KEY UPDATE id
。不幸的是,我把它放在查询中的什么地方并不重要。
所以简而言之:我可以INSERT
这样,在select的同时保持AI功能吗?如果是这样,我哪里出错了,如果不是,还有其他选择吗?
添加:创建我的语句 table:
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;
您的 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
列已被序列中的下一个值填充。 (除了序列中的任何间隙,这可能由于多种原因而发生。)