2010-05-19 18 views
5

Ich möchte eine sehr große Tabelle duplizieren, aber ich möchte sie nicht Zeile für Zeile kopieren. Gibt es eine Möglichkeit, es zu duplizieren?Tabelle in MYSQL duplizieren, ohne eine Zeile gleichzeitig zu kopieren

Zum Beispiel können Sie TRUNCATE w/o Löschen Zeile/Reihe, so dass ich frage mich, ob es etwas ähnliches für das Kopieren von ganzen Tabellen

UPDATE: Zeile für Zeile Einsatz ist sehr schmerzhaft (wegen 120M Zeilen) . Wie auch immer, um das zu vermeiden?

Antwort

5

MySQL verfügt nicht mehr über eine zuverlässige Funktion zum Kopieren von Tabellen - viele Gründe dafür, wie Daten gespeichert werden. Allerdings hat das folgende Zeile-für-Zeile Einfügen aber ist ziemlich einfach:

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

+1 für mich ninja'ing. [lacht] – pinkgothic

+0

autsch. Ich habe einen großen Tisch, und die Zeile für Zeile einfügen ist sehr schmerzhaft –

+0

Ich hasse das! :) – AvatarKava

4

Sie INSERT INTO ... SELECT nutzen könnten.

+0

Leider funktioniert das nicht so gut wie die Antwort @AvatarKava zur Verfügung gestellt, da dies keine Attribute wie auto_increment kopieren wird ... –

+0

Mrh? Unsere Antworten sind identisch, mit Ausnahme von @ AvatarKava erwähnt die create-table Linie, die ich nur angedeutet habe (weshalb ich auch upvoted sie), und ich wiederum mit der Dokumentation verknüpft. Ansonsten sagen wir genau dasselbe. [email protected]; – pinkgothic

1
INSERT INTO TABLE2 SELECT * FROM TABLE1 
+0

Leider wird dies nicht so gut funktionieren wie die Antwort @AvatarKava, da dies keine Attribute wie auto_increment kopieren wird ... –

+0

Nun, der einzige Weg, diese zu kopieren, ist sie neu zu erstellen .. aber wahr, das allein gewonnen Mach den Trick nicht. – modz0r

2

Wenn Sie MyISAM verwenden, können Sie die physischen Dateien auf die Festplatte kopieren. Starten Sie den Dienst neu und Sie haben die neue Tabelle mit Indizes und alles gleich.

+1

Ich benutze innodb. Gilt das? –

+0

leider nicht :( – AvatarKava

+0

warum nicht? Neugierig! –

1

Es ist nicht sinnvoll, eine große Tabelle zu kopieren; Letztendlich muss die Datenbank wahrscheinlich neu erstellt werden. In InnoDB ist der einzige Weg wirklich, es neu zu erstellen, was bedeutet, einfügen ... auswählen oder dergleichen, jedoch mit 120M Zeilen, wie es in einer einzigen Transaktion passieren wird, werden Sie wahrscheinlich die Größe des Rollback überschreiten Bereich, der dazu führt, dass die Einfügung fehlschlägt.

mysqldump gefolgt von der Umbenennung der ursprünglichen Tabelle dann Wiederherstellung der Dump sollte funktionieren, da mysqldump eine Festschreibung jeder Menge von Zeilen verursachen kann. Es wird jedoch langsam sein.

0

Orakel:

as select erstellen Tabelle t * ab original_table

Verwandte Themen