2010-05-19 11 views
5

Chcę duplikować bardzo dużą tabelę, ale nie chcę jej kopiować wiersz po wierszu. Czy istnieje sposób na skopiowanie?Powielanie tabeli w MYSQL bez kopiowania po jednym wierszu na raz

Na przykład, można obciąć w/o usuwanie wierszy/wiersza, więc zastanawiałem się, czy istnieje coś podobnego do kopiowania całe tabele

UPDATE: rząd przez wkładkę wiersz jest bardzo bolesne (z powodu 120M rzędy) . W każdym razie, aby tego uniknąć?

Odpowiedz

5

MySQL nie ma już niezawodnej funkcjonalności "kopiowania tabel" - wiele powodów tego dotyczy przechowywania danych. Jednak poniżej robi rząd po rzędzie wkładanie ale jest dość prosta:

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

+1 dla ninja'ing mnie. [śmiech] – pinkgothic

+0

ouch. Mam duży stół, a wkładka po rzędzie jest bardzo bolesna. –

+0

Nienawidzę tego! :) – AvatarKava

4

Można użyć INSERT INTO ... SELECT.

+0

Niestety, nie będzie działać tak dobrze, jak podana jest odpowiedź @AvatarKava, ponieważ nie spowoduje to skopiowania atrybutów takich jak auto_increment ... –

+0

Mrh? Nasze odpowiedzi są identyczne, poza tym, że @ AvatarKava wspomina o linii tworzenia-tabeli, którą tylko sugerowałem (i dlatego też przegłosowałem je), a ja z kolei powiązałem ją z dokumentacją. W przeciwnym razie mówimy dokładnie to samo. o. @; – pinkgothic

1
INSERT INTO TABLE2 SELECT * FROM TABLE1 
+0

Niestety, to nie będzie działać tak dobrze jak odpowiedź @AvatarKava pod warunkiem, że nie będzie kopiować atrybutów takich jak auto_increment ... –

+0

Cóż, jedynym sposobem na ich skopiowanie jest odtworzenie ich imo .. ale prawda, że ​​sam wygrał nie rób tego. – modz0r

2

Jeśli korzystasz z MyISAM, możesz skopiować fizyczne pliki na dysku. Zrestartuj usługę, a będziesz mieć nową tabelę z indeksami i tym samym.

+1

Używam innodb. Czy to dotyczy? –

+0

Niestety nie :( – AvatarKava

+0

dlaczego nie? Ciekawy! –

1

Nie trzeba kopiować dużego stołu; ostatecznie baza danych prawdopodobnie będzie musiała ją odbudować.

W InnoDB jedynym sposobem jest odbudowanie go, co oznacza wstawienie ... wybierz lub coś podobnego, jednak z 120 milionami wierszy, tak jak ma to miejsce w przypadku pojedynczej transakcji, prawdopodobnie przekroczymy rozmiar wycofywania obszar, który spowoduje błąd wkładki.

mysqldump, po którym następuje zmiana nazwy oryginalnej tabeli, a następnie przywracanie zrzutu powinno działać, ponieważ mysqldump może spowodować zatwierdzenie każdej partii wierszy. Będzie to jednak powolne.

0

oracle:

Tworzenie tabeli T, jak select * from original_table

Powiązane problemy