考虑下表:
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;
关于MySQL INSERT INTO SELECT 到带有 AUTO_INCREMENT 的表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27307964/