簡體   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