Seien Sie sehr vorsichtig, wenn Sie dies unter Last und bei hoher Parallelität verwenden. Ich bin gerade mit diesem Maßstab gebrannt worden, wo wir ungefähr 50 verschiedene Tabellen basierend auf derselben Quelltabelle erstellt haben, während wir gleichzeitig aus anderen Prozessen in die Quelltabelle eingefügt haben. Grundsätzlich verursachte eine massive Lock-Kernschmelze und musste MySQL neu starten.
Mark B
6
Ähm, OP ist verwirrt? Dies ist offensichtlich eine falsche Antwort auf die Frage, wenn wir auf den Titel und die Betonung in der Frage "... ohne die Daten zu kopieren ..." achten. Die Antwort von RCNell ist zu Recht die höchste Stimme. Ich bin mir nicht sicher, warum dieser akzeptiert wurde. Ich sag bloß'.
Xyphenor
421
Versuchen
CREATETABLE foo LIKE bar;
Daher werden auch die Schlüssel und Indizes kopiert.
Dies ist eine bessere Antwort, da hierdurch auch Indizes kopiert werden!
Chaitan
2
Es ist viel besser, kopiert aber immer noch keine Fremdschlüssel.
Josef Sábl
@RCNeil, Kopiert auch CREATE TABLE new_tbl LIKE orig_tbl;Berechtigungen? Oder müssen diese manuell kopiert werden?
Pacerier
2
Wahrscheinlich, weil diese Antwort 4 Jahre später kam als die als richtig markierte
pythonian29033
1
@ Pierre-OlivierVares Der Dokumentationstext ist für die eigentliche Antwort nicht direkt relevant. Der Antworttext zeigt kurz und bündig, wie die gestellte Frage zu beantworten ist, während der Dokumentationslink lediglich zusätzlichen Kontext bietet. Daher ist es nicht hilfreich, die Antwort mit Text aus der Dokumentation aufzublähen.
Abion47
27
SHOW CREATETABLE bar;
Sie erhalten eine create-Anweisung für diese Tabelle, bearbeiten den Tabellennamen oder alles andere, was Sie möchten, und führen ihn dann aus.
Auf diese Weise können Sie die Indizes kopieren und die Tabellenerstellung manuell anpassen.
Sie können die Abfrage auch innerhalb eines Programms ausführen.
Wie können Sie show create table bareine dynamisch ausführbare Anweisung konvertieren ?
Pacerier
Das von angegebene Ergebnis show create table barist bereits ausführbar. Wenn das Skript die Berechtigung zum Erstellen von Tabellen hat, können Sie es analysieren und dann auch alter table-Anweisungen ausführen.
Timo Huovinen
create table...Indizes werden nicht kopiert. Diese Antwort ist die bessere Option
foo
undbar
sind willkürlich bedeutungslose Variablen , ähnlich wie Alice und Bob .Antworten:
Versuchen:
Oder:
quelle
select * into foo from bar where 1=0
create table NewTable like OldTable
ist eine Option für Sie. Link aus gelöschter Antwort kopiert.Versuchen
Daher werden auch die Schlüssel und Indizes kopiert.
Dokumentation
quelle
CREATE TABLE new_tbl LIKE orig_tbl;
Berechtigungen? Oder müssen diese manuell kopiert werden?Sie erhalten eine create-Anweisung für diese Tabelle, bearbeiten den Tabellennamen oder alles andere, was Sie möchten, und führen ihn dann aus.
Auf diese Weise können Sie die Indizes kopieren und die Tabellenerstellung manuell anpassen.
Sie können die Abfrage auch innerhalb eines Programms ausführen.
quelle
show create table bar
eine dynamisch ausführbare Anweisung konvertieren ?show create table bar
ist bereits ausführbar. Wenn das Skript die Berechtigung zum Erstellen von Tabellen hat, können Sie es analysieren und dann auch alter table-Anweisungen ausführen.create table...
Indizes werden nicht kopiert. Diese Antwort ist die bessere OptionIch möchte nur die Struktur der Tabelle klonen:
Möchte auch die Daten kopieren:
quelle