2010-05-19 74 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