Creare una tabella in MySQL che corrisponde a un'altra tabella?


85

Sto usando MySQL. Ho una tabella chiamata EMP e ora devo creare un'altra tabella (EMP_TWO) con lo stesso schema, stesse colonne e stessi vincoli. Come posso fare questo?


1
Hai provato a esportare la struttura con qualcosa come phpMyAdmin e quindi a cambiare solo il nome della tabella?
jprofitt

Risposte:


178

Per creare una nuova tabella basata su un'altra struttura / vincoli di tabelle utilizzare:

CREATE TABLE new_table LIKE old_table;     

Per copiare i dati, se necessario, utilizzare

INSERT INTO new_table SELECT * FROM old_table;  

Crea documenti di tabella

Attenzione alle note sull'opzione MI PIACE:

Utilizzare LIKE per creare una tabella vuota basata sulla definizione di un'altra tabella, inclusi eventuali attributi di colonna e indici definiti nella tabella originale:

CREATE TABLE new_table LIKE original_table; La copia viene creata utilizzando la stessa versione del formato di archiviazione della tabella della tabella originale. Il privilegio SELECT è richiesto sulla tabella originale.

LIKE funziona solo per le tabelle di base, non per le viste.

CREATE TABLE ... LIKE non conserva le opzioni della tabella DATA DIRECTORY o INDEX DIRECTORY specificate per la tabella originale o qualsiasi definizione di chiave esterna.


6
+1 Usavo MySQL da anni ed ero completamente all'oscuro che potevi usare LIKEin una CREATEdichiarazione.
jprofitt

@jprofitt Lo so solo perché volevo farlo per testare qualcosa su un server di produzione (query importante) l'altro giorno -> molto utile!
Manse

@ ManeUK e se volessi copiare una tabella da un database e ricrearla in un altro database?
Yaje

È fantastico! Grazie ... Davvero molto utile!
Hassantm,

Nel caso in cui qualcuno abbia bisogno della stessa struttura della tabella in un altro database, tutto ciò che devi fare è CREATE TABLE new_db.new_table LIKE old_db.old_table:)
Jimmy Adaro

13

Se vuoi copiare solo Structure, usa

create table new_tbl like old_tbl;

Se vuoi copiare sia la struttura che i dati, usa

create table new_tbl select * from old_tbl;

5

Creare una tabella in MySQL che corrisponde a un'altra tabella? Risposta:

CREATE TABLE new_table AS SELECT * FROM old_table;

4

Perché non vai così

CREATE TABLE new_table LIKE Select * from Old_Table;   

oppure Puoi filtrare i dati in questo modo

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

Per avere lo stesso vincolo nella tua nuova tabella prima dovrai creare lo schema, quindi dovresti andare per i dati per la creazione dello schema

CREATE TABLE new_table LIKE Some_other_Table;

1
È possibile utilizzare entrambi likee select *in una dichiarazione? ricevo un errore. Inoltre si prega di controllare questa risposta stackoverflow.com/questions/10147565/create-table-like-a1-as-a2
chanchal118

Non sono sicuro per mysql
Trikaldarshiii

Qualcosa di simile è disponibile per sqlserver che è select * in <NewTableName> da <OldTableName>;
Trikaldarshiii
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.