2011-03-29 32 views

回答

2

如果您没有PRIMARY KEY或UNIQUE索引,应该这样做。

INSERT INTO table SELECT * FROM table; 

如果你有这样的指标,简单地列出表中的所有不具备这些索引的列。例如。如果colA具有独特的或主键索引:

INSERT INTO table (colB, colC) SELECT colB, colC FROM table; 

请注意,如果您的ID列(可乐)有AUTO_INCREMENT属性集,这只会工作(这通常是整数ID列的情况下)。如果不是,那么你运气不好。在这种情况下,您不能使用INSERT INTO ... SELECT来重复行,因为您需要手动提供唯一索引。

1

在口头上, 使用选择得到的一切,不是使用插入....

+0

可以给我这个例子 – user655334 2011-03-29 12:50:45

1
INSERT INTO table (SELECT * FROM table) 

您必须排除主键。

INSERT INTO table (col1, col2) SELECT col1, col2 FROM table; 

请勿选择主键。

您必须提及除主键以外的所有字段。我相信你有一个自动增量列不要在上面的命令中提到那个列,但包括所有其他列。

+0

@shakti:它显示错误 - 重复条目'8943'的关键1 – user655334 2011-03-29 12:52:29

+0

@ user655334:如果有一个唯一键(或主要KEY),该行不能存在两次。在这种情况下你想发生什么?尝试'INSERT INTO表(SELECT * FROM表)' – Konerak 2011-03-29 12:53:54

+0

@user:你必须从选择中排除主键 – 2011-03-29 12:54:58

0

一个简单的方法来复制在同一个表中的所有行:

INSERT INTO yourtable() 
SELECT * FROM yourtable; 

,如果你没有在表中的任何唯一键这OFC才有效。

1

你不应该那样做。
保持你的表格在正常形式,这意味着没有重复。

1

我同意Col. Shrapnel:你不应该这样做

桑德猜中了:

如果你想这样做
  • INSERT INTO table SELECT * FROM table是去
  • 如果有PRIMARY自动增量键值的方式 ,insert into table (all-but-key) select all-but-key from table
  • 如果有其他唯一键,你不能这样做。

另一个肮脏的解决方法:

SELECT * FROM TABLE UNION ALL SELECT * FROM TABLE 

你可以在对基本的数据库设计规则的行把它放进一个视图或合并表...

相关问题