繁体   English   中英

MySQL INSERT INTO SELECT 到带有 AUTO_INCREMENT 的表中

[英]MySQL INSERT INTO SELECT into a table with AUTO_INCREMENT

考虑下表:

CREATE TABLE `FooAttachments` (
 `AttachmentId` bigint(20) NOT NULL AUTO_INCREMENT,
 `FooId` bigint(20) NOT NULL,
 `AttachmentPath` varchar(100) NOT NULL,
 PRIMARY KEY (`AttachmentId`),
 KEY `IX_FooAttachment_FooBase` (`FooId`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf16

如果我使用以下语句在该表中插入一行,则会创建一行并且 AI 字段会生成一个值。

INSERT INTO FooAttachments (FooId, AttachmentPath) VALUES (1, 'test path');

但是,当我尝试按如下方式使用 INSERT INTO SELECT 语句时,出现错误:

INSERT INTO FooAttachments
    SELECT 1 AS FooId, 'test path' as AttachmentPath;

我得到的错误是:#1136 - 列数与第 1 行的值数不匹配

我知道我没有指定 AttachmentId 列,但我也没有在 INSERT INTO ... VALUES 语句中这样做,并且该语句有效。 更重要的是,我不想为该列指定值,它应该是自动生成的。

我应该如何编写第二个查询?

您必须命名列

INSERT INTO FooAttachments (FooId, AttachmentPath)
SELECT 1 AS FooId, 'test path' as AttachmentPath;

触发自动增量的方法是插入一个空值。 像这样:

INSERT INTO FooAttachments
SELECT NULL AS AttachmentID, 1 As FooId, 'test path' as AttachmentPath;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM