2012-07-19 42 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