Tabelle kopieren, ohne Daten zu kopieren

153
CREATE TABLE foo SELECT * FROM bar

kopiert die Tabelle foound dupliziert sie als neue Tabelle mit dem Namenbar .

Wie kann ich das Schema von fooin eine neue aufgerufene Tabelle kopieren, bar ohne auch die Daten zu kopieren?

Matthew
quelle
1
Wie mache ich dasselbe in SQL Server 2005?
Donner
was bedeutet von bar?
Smit Saraiya
@Thunder sieht so aus, als könnten Sie in MS SQL eine Kopie "Nur Spalten" erstellen. Siehe dies als Referenz: stackoverflow.com/questions/2505728/…
Kevin Worthington

Antworten:

140

Versuchen:

CREATE TABLE foo SELECT * FROM bar LIMIT 0

Oder:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0
Andomar
quelle
4
@Thunder: Versuchen Sieselect * into foo from bar where 1=0
Andomar
29
Dies scheint nicht die Einschränkungen oder Schlüssel zu kopieren
Timo Huovinen
15
@ TimoHuovinen: Vielleicht create table NewTable like OldTableist eine Option für Sie. Link aus gelöschter Antwort kopiert.
Andomar
1
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

CREATE TABLE foo LIKE bar;

Daher werden auch die Schlüssel und Indizes kopiert.

Dokumentation

RCNeil
quelle
40
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 CREATE TABLE 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.

Timo Huovinen
quelle
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
Bluepinto
2

Ich möchte nur die Struktur der Tabelle klonen:

CREATE TABLE foo SELECT * FROM bar WHERE 1 = 2;

Möchte auch die Daten kopieren:

CREATE TABLE foo as SELECT * FROM bar;
Ali Azaz Alam
quelle