MySQL Tabellen kopieren mit nur zwei einfachen Anweisungen

Ich muss zugeben, dass ich eigentlich fast immer phpMyAdmin nutze, wenn ich mal eben schnell Daten in einer Tabelle / Datenbank manipulieren muss. Es gibt jedoch auch Situationen, zum Beispiel wenn man etwas per Skript automatisieren möchte, wo man dann gerne mal reinen SQL Anweisungen arbeiten möchte oder muss.

Und so einfach kann man eine MySQL Tabelle mit nur zwei simplen Anweisungen kopieren. Wir gehen dabei von einer existierenden Tabelle old_table aus, die wir in new_table kopieren wollen.

Schritt 1: Kopie der Tabellenstruktur anlegen:

CREATE TABLE new_table LIKE old_table

Schritt 2: Tabelleninhalt kopieren (optional, nur sofern nötig):

INSERT INTO new_table SELECT * FROM old_table

Das war es schon.


Aber wer mag… hier noch ein paar weitere Hinweise:

Die Kopie der Struktur einer MySQL Tabelle kann natürlich auch in eine temporäre Tabelle erfolgen:

CREATE TEMPORARY TABLE new_table LIKE old_table

Die Kopie der Struktur einer MySQL Tabelle kann ebenfalls in eine Tabelle einer anderen Datenbank erfolgen:

CREATE [TEMPORARY] TABLE new_database.new_table LIKE old_table

Man kann (bei größeren Tabellen ggf. sinnvoll) das `INSERT` noch ein wenig beschleunigen, indem man die Indizes vor dem Kopieren des Inhalts deaktiviert und danach direkt wieder reaktiviert:

ALTER TABLE new_table DISABLE KEYS;
INSERT INTO new_table SELECT * FROM old_table;
ALTER TABLE new_table ENABLE KEYS;

 

Das könnte dich auch interessieren …

7 Antworten

  1. Dietmar sagt:

    Gefällt mir

    Wie kann ich den Inhalt einer Tabelle exportieren und dabei den Primärschlüssel, ich meine die fortlaufende ID, mit dem Wert NULL ausgeben?

    Datenbanken sind mir nicht sehr geläufig

    Gruß Dietmar

    • Ansas sagt:

      Hi Dietmar,

      ich weiß nicht ob die die Frage richtig verstehe. Generell sollte der Wert der fortlaufenden ID (wahrscheinlich der Primärschlüssel der Tabelle?) erst gar nicht NULL sein. Einen Export der Tabellen kann man via Konsole über „mysqldump“ erreichen oder alternativ relativ einfach über bspw phpMyAdmin (o. ä.). Natürlich kann man sich auch alle Daten zu Fuß via „SELECT * FROM my_table“ ausgeben lassen und damit weiterarbeiten.

      Wenn der Wert NULL ist, dann wird das via „mysqldump“ auch so ausgegeben. Wenn man sich die Tabelle via phpMyAdmin exportiert werden die Werte auch korrekt dargestellt. Nur wenn die Daten zu Fuß abgeholt werden muss man darauf achten, welchen Datentyp die jeweiligen APIs (je nach Programmiersprache) zurückgeben.

      Ich hoffe ich konnte damit ein wenig weiterhelfen, ansonsten einfach mal Google & Co. anwerfen ;)

      LG Ansas

  2. Rudolf Wald sagt:

    Es geht mir darum die Struktur eine Tabelle in eine andere Datenbank zu kopien. LG Rudi

    • Ansas Meyer sagt:

      Hallo Rudi,

      ich habe den Beitrag grad mal erweitert. Das geht auch, kein Problem. Einfach „CREATE TABLE new_database.new_table LIKE old_table“ nutzen.

      VG Ansas

  3. Rudolf Wald sagt:

    Die Tabelle der Datenbank, die kopiert werden soll ist auf einem Server auf den ich nur mit Benutzername und Kennwort hineinkomme (beide sind mir bekannt). Die Tabelle soll für eine neue hp (Datenbank mit dem selben Zweck – Visitortracking; es soll in Xampp – localhost) kopiert werden. Was muß ich wo hinschreiben? Dank im voraus Rudi

    • Ansas Meyer sagt:

      Dann wird das nicht mit einer simplen SQL Anweisung gehen. Wenn es sich um einen einmaligen Vorgang handelt, dann würde ich das zu Fuß machen. Wenn das regelmäßig gemacht werden muss, dann kann man das u. a. mit Bash lösen (unter Linux). Das würde hier aber in dem Post zuweit gehen… bitte selbst googeln.

  4. Christian Fischer sagt:

    Hallo Ansas,
    ich habe verschiedene Preislisten in zwei identischen Datenbanken und muss jeweils eine Preisliste von der einen DB auf die andere Datenbank übertragen, in der ebenfalls mehrere Preislisten enthalten sind, also praktisch ergänzen. Dabei muss AutoIncrement in der empfangenden DB angewendet werden, also dieser Wert aus der alten DB darf nicht übernommen werden.
    Gibt es da eine einfachere Methode, wie über ein Programm?
    Danke fuer einen Hinweis
    Christian

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte beachte die Hinweise zum Datenschutz