2014-12-05 186 views
2

表請看下錶:使用下面的語句MySQL的INSERT INTO SELECT與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 

如果我行插入這個表,創建行和人工智能領域已經產生了價值。

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語句或者這一個工作。更重要的是,我不想爲該列指定一個值,它應該是自動生成的。

我應該如何編寫第二個查詢?

回答

2

您必須命名列

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

觸發自動增量的方法是插入空值。就像這樣:

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

感謝您的回答。我測試了這一點,它確實有效,但我選擇了其他答案,因爲我發現在一列中插入一個NULL,最後得到一個有點衝突的值。 – Dragonspell 2014-12-05 03:13:07