Copia la tabella senza copiare i dati


153
CREATE TABLE foo SELECT * FROM bar

copia la tabella fooe la duplica come una nuova tabella chiamata bar.

Come posso copiare lo schema di fooin una nuova tabella chiamata bar senza copiare anche i dati?


1
come fare lo stesso in sqlserver 2005?
Tuono,

cosa significa da bar?
Smit Saraiya,


@Thunder sembra che tu possa fare una copia "Solo colonne" in MS SQL. Vedere questo per riferimento: stackoverflow.com/questions/2505728/…
Kevin Worthington

Risposte:


140

Provare:

CREATE TABLE foo SELECT * FROM bar LIMIT 0

O:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0

4
@Thunder: provaselect * into foo from bar where 1=0
Andomar il

29
Questo non sembra copiare i vincoli o le chiavi
Timo Huovinen,

15
@TimoHuovinen: forse create table NewTable like OldTableè un'opzione per te. Link copiato dalla risposta eliminata.
Andomar,

2
Fai molta attenzione a usarlo sotto carico e ad alta concorrenza. Sono appena stato masterizzato usando questo su larga scala, dove abbiamo creato circa 50 tabelle diverse basate sulla stessa tabella di origine, contemporaneamente all'inserimento nella tabella di origine da altri processi. Fondamentalmente ha causato un enorme crollo del blocco e ha dovuto riavviare MySQL.
Mark B,

6
Uhm, OP è confuso? Questa è palesemente una risposta errata alla domanda, se prestiamo attenzione al titolo e all'enfasi posta nella domanda "... senza copiare i dati ..." La risposta di RCNell è giustamente votata. Non sono sicuro del perché questo sia stato accettato. Sto solo dicendo.
xyphenor,

423

Provare

CREATE TABLE foo LIKE bar;

quindi anche le chiavi e gli indici vengono copiati.

Documentazione


40
Questa è una risposta migliore poiché copia anche gli indici!
Chaitan,

2
È molto meglio, ma non copia ancora le chiavi esterne.
Josef Sábl,

@RCNeil, Copia anche i CREATE TABLE new_tbl LIKE orig_tbl;privilegi? O devono essere copiati manualmente?
Pacerier,

2
Probabilmente perché questa risposta è arrivata 4 anni dopo quella contrassegnata come corretta
pythonian29033

1
@ Pierre-OlivierVares Il testo della documentazione non è direttamente pertinente alla risposta effettiva. Il testo della risposta è conciso nel mostrare come fare la domanda posta, mentre il collegamento alla documentazione fornisce semplicemente un contesto aggiuntivo. Pertanto, non è utile gonfiare la risposta con il testo della documentazione.
Abion47

27
SHOW CREATE TABLE bar;

otterrai un'istruzione create per quella tabella, modificherai il nome della tabella o qualsiasi altra cosa ti piaccia, e poi eseguila.

Ciò ti consentirà di copiare gli indici e anche di modificare manualmente la creazione della tabella.

È inoltre possibile eseguire la query all'interno di un programma.


Come hai potuto convertire show create table barin un'istruzione eseguibile dinamicamente?
Pacerier,

il risultato fornito da show create table barè già eseguibile, se lo script dispone dell'autorizzazione per creare tabelle, è possibile analizzarlo e quindi eseguire anche le istruzioni alter table.
Timo Huovinen,

create table...non copierà gli indici. questa risposta è l'opzione migliore
bluepinto,

2

Voglio solo clonare la struttura della tabella:

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

Vuole anche copiare i dati:

CREATE TABLE foo as SELECT * FROM bar;
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.