Tabelle in MySQL erstellen, die mit einer anderen Tabelle übereinstimmt?

84

Ich benutze MySQL. Ich habe eine Tabelle namens EMP, und jetzt muss ich eine weitere Tabelle (EMP_TWO) mit demselben Schema, denselben Spalten und denselben Einschränkungen erstellen. Wie kann ich das machen?

user1016403
quelle
1
Haben Sie versucht, die Struktur mit so etwas wie phpMyAdmin zu exportieren und dann nur den Tabellennamen zu ändern?
Jprofitt

Antworten:

176

Um eine neue Tabelle basierend auf einer anderen Tabellenstruktur / -beschränkungen zu erstellen, verwenden Sie:

CREATE TABLE new_table LIKE old_table;     

Verwenden Sie zum Kopieren die Daten bei Bedarf

INSERT INTO new_table SELECT * FROM old_table;  

Erstellen Sie Tabellendokumente

Beachten Sie die Hinweise zur Option LIKE:

Verwenden Sie LIKE, um eine leere Tabelle basierend auf der Definition einer anderen Tabelle zu erstellen, einschließlich aller in der Originaltabelle definierten Spaltenattribute und Indizes:

CREATE TABLE new_table LIKE original_table; Die Kopie wird mit derselben Version des Tabellenspeicherformats wie die Originaltabelle erstellt. Das SELECT-Privileg ist für die ursprüngliche Tabelle erforderlich.

LIKE funktioniert nur für Basistabellen, nicht für Ansichten.

TABELLE ERSTELLEN ... LIKE behält keine Tabellenoptionen für DATA DIRECTORY oder INDEX DIRECTORY bei, die für die ursprüngliche Tabelle angegeben wurden, oder Fremdschlüsseldefinitionen.

Pfarrhaus
quelle
6
+1 Ich benutze MySQL seit Jahren und wusste überhaupt nicht, dass Sie es LIKEin einer CREATEAnweisung verwenden können.
Jprofitt
@jprofitt Ich weiß nur, weil ich dies tun wollte, um neulich etwas auf einem Produktionsserver zu testen (wichtige Abfrage) -> sehr nützlich!
Manse
@ManseUK Was ist, wenn ich eine Tabelle aus einer Datenbank kopieren und in eine andere Datenbank neu erstellen möchte?
Yaje
Das ist toll! Danke ... Sehr nützlich!
Hassantm
Falls jemand dieselbe Tabellenstruktur in einer anderen Datenbank benötigt, müssen Sie nur CREATE TABLE new_db.new_table LIKE old_db.old_table:)
Jimmy Adaro
13

Wenn Sie nur Struktur kopieren möchten, verwenden Sie

create table new_tbl like old_tbl;

Wenn Sie sowohl Struktur als auch Daten kopieren möchten, verwenden Sie

create table new_tbl select * from old_tbl;
Karan
quelle
5

Tabelle in MySQL erstellen, die mit einer anderen Tabelle übereinstimmt? Ans:

CREATE TABLE new_table AS SELECT * FROM old_table;
Lipak
quelle
4

Warum gehst du nicht so?

CREATE TABLE new_table LIKE Select * from Old_Table;   

oder Sie können gehen, indem Sie Daten wie folgt filtern

CREATE TABLE new_table LIKE Select column1, column2, column3 from Old_Table where column1 = Value1;   

Um die gleiche Einschränkung in Ihrer neuen Tabelle zu haben, müssen Sie zuerst ein Schema erstellen und dann Daten für die Schemaerstellung abrufen

CREATE TABLE new_table LIKE Some_other_Table;
Trikaldarshiii
quelle
1
Ist es möglich, beide likeund select *in einer Anweisung zu verwenden? Ich bekomme einen Fehler. Bitte überprüfen Sie auch diese Antwort stackoverflow.com/questions/10147565/create-table-like-a1-as-a2
chanchal118
Ich bin nicht sicher für MySQL
Trikaldarshiii
Ähnliches ist für sqlserver verfügbar, das * in <NewTableName> von <OldTableName> auswählt;
Trikaldarshiii