2012-07-19 66 views
4

選擇我有一個OLD_TABLE和NEW_TABLE:MySQL的 - INSERT INTO XXX與AUTO_INCREMENT列

 
CREATE TABLE `old_table` (
     `id` bigint(20) NOT NULL AUTO_INCREMENT, 
     `col1` varchar(15) DEFAULT NULL, 
     `col2` int(15) DEFAULT NULL, 
     ..., 
     PREMARY_KEY (`id`) 
); 

CREATE TABLE `new_table` LIKE `old_table`; 

然後兩個表與一些值填充。在那之後,我想選擇一些OLD_TABLE行和插入NEW_TABLE:

 
INSERT INTO `old_table` SELECT * FROM `new_table` WHERE col2 > 100; 

但是,這會導致因爲重複鍵錯誤。我懶得指定SELECT子句中的列,因爲在真正的系統中,這些表有很多列。

解決問題的最佳方法是什麼?

+2

嘗試這樣 http://stackoverflow.com/questions/9122/select-all-columns-except-one-in-mysql – 2012-07-19 16:39:22

+0

@AndreyVorobyev execlude id字段:這是一個很好的解決方案。你爲什麼不把它作爲答案發布? – 2012-07-19 16:52:11

回答

2

您可能可以創建一個before-insert觸發器,用於測試id值的存在並將其替換爲正確的新值(如果該值正確,則將其替換爲null) - 我不知道MySQL是否會禁止或給予您下一個自動遞增的值),如果它是重複的。我個人認爲我不希望這種類型的觸發器持續存在,但如果您只是做一次性插入,您可以創建觸發器,執行插入操作,然後立即刪除觸發器。

0

我遇到了同樣的問題,解決它像這樣: - 修改NEW_TABLE id列(去掉自動增量和主鍵,允許NULL) - 將new_table中的所有ID設置爲NULL - 現在你可以做

INSERT INTO 'old_table' SELECT * FROM new_table