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;
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
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
Es geht mir darum die Struktur eine Tabelle in eine andere Datenbank zu kopien. LG Rudi
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
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
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.
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
Der Raspberry auf dem MySQL-Server lief ist hardware-mässig kpl. ausgefallen!
Ist es möglich die MySQL-Tabellen von der SD-Card /var/lib/mysql
auf einen anderen PC mit MySQL-Server zu kopieren ?
Irgendwie falsches Topic. Aber dennoch möchte ich Deine Frage kurz beantworten. Ich habe in der Vergangenheit schon öfter für eine 1:1 Kopie der gesamten Datenbank ohne Probleme
/var/lib/mysql
auf einen anderen Server kopiert (bspw. viarsync
). Das geht in der Regel viel schneller als ein Dump wieder einspielen zu müssen. Wichtig jedoch: Die Konfiguration/etc/mysql
muss auch identisch sein und es sollte die selbe Version von MySQL sein. LG