使用MySQL将数据库中的记录加倍使用
如果您没有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
来重复行,因为您需要手动提供唯一索引。
INSERT INTO table (SELECT * FROM table)
您必须排除主键。
INSERT INTO table (col1, col2) SELECT col1, col2 FROM table;
请勿选择主键。
您必须提及除主键以外的所有字段。我相信你有一个自动增量列不要在上面的命令中提到那个列,但包括所有其他列。
@shakti:它显示错误 - 重复条目'8943'的关键1 – user655334 2011-03-29 12:52:29
@ user655334:如果有一个唯一键(或主要KEY),该行不能存在两次。在这种情况下你想发生什么?尝试'INSERT INTO表(SELECT * FROM表)' – Konerak 2011-03-29 12:53:54
@user:你必须从选择中排除主键 – 2011-03-29 12:54:58
一个简单的方法来复制在同一个表中的所有行:
INSERT INTO yourtable()
SELECT * FROM yourtable;
,如果你没有在表中的任何唯一键这OFC才有效。
你不应该那样做。
保持你的表格在正常形式,这意味着没有重复。
我同意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
你可以在对基本的数据库设计规则的行把它放进一个视图或合并表...
第二个问题。 ** stacloverflow确实成为不良做法的来源** – 2011-03-29 13:20:55