2010-05-19 88 views
5

我想复制一个非常大的表格,但我不想逐行复制它。有没有办法复制它?在MYSQL中复制表格,但一次不复制一行

例如,您可以截断W/O删除行/列,所以我想知道是否有用于复制整个表类似

UPDATE:逐行插入是很痛苦的(因为120M行) 。无论如何要避免这一点?

回答

5

MySQL不再具有可靠的“复制表”功能 - 其中很多原因与数据存储方式有关。但是,下面是逐行插入,但很简单:

CREATE TABLE `new_table` LIKE `old_table`; 
INSERT INTO `new_table` (SELECT * FROM `old_table`); 
+1

+1 ninja'ing我创建表T作为选择*。 [笑] – pinkgothic 2010-05-19 16:59:25

+0

哎。我有一张大桌子,而且一排一排的插入很痛苦 – 2010-05-19 17:00:35

+0

我讨厌这个! :) – AvatarKava 2010-05-19 17:01:06

4

您可以使用INSERT INTO ... SELECT

+0

不幸的是,这不会像@AvatarKava提供的答案,因为这不会像auto_increment复制属性... – 2010-05-19 17:03:56

+0

Mrh?我们的答案是一样的,除了@ AvatarKava提到了我只暗示的创建表行(这也是我为什么选择了它们),并且我又将其链接到文档。否则,我们说的是完全一样的东西。 Ø@。 – pinkgothic 2010-05-19 17:11:21

1
INSERT INTO TABLE2 SELECT * FROM TABLE1 
+0

不幸的是,这不会像@AvatarKava提供的答案,因为这不会复制像auto_increment这样的属性... – 2010-05-19 17:04:37

+0

那么,复制这些的唯一方法是重新创建他们imo ..但是真实的,没办法。 – modz0r 2010-05-19 18:00:12

2

如果您使用的是MyISAM,则可以将物理文件复制到磁盘上。重新启动服务,您将拥有带索引的新表,并且所有内容都相同。

+1

我正在使用innodb。这是否适用? – 2010-05-19 17:03:24

+0

不幸的是:( – AvatarKava 2010-05-19 17:04:20

+0

为什么不呢?好奇! – 2010-05-19 17:05:46

1

复制大型表格并不重要;最终数据库可能需要重建它。

在InnoDB中,唯一的方法是真正重建它,这意味着插入...选择或类似,但是,对于120M行,因为它将在单个事务中发生,您可能会超出回滚的大小区域,这会导致插入失败。

mysqldump后面是重命名原始表,然后恢复转储应该工作,因为mysqldump可能会导致提交每行很多。但是它会很慢。

0

预言:

从original_table