Copiar tabela sem copiar dados

153
CREATE TABLE foo SELECT * FROM bar

copia a tabela fooe a duplica como uma nova tabela chamadabar .

Como copiar o esquema de foopara uma nova tabela chamada bar sem copiar também os dados?

Mateus
fonte
1
como fazer o mesmo no sqlserver 2005?
Thunder
o que significa do bar?
amigos estão dizendo sobre smit
@Thunder parece que você pode fazer uma cópia "Apenas colunas" no MS SQL. Veja isto para referência: stackoverflow.com/questions/2505728/…
Kevin Worthington

Respostas:

140

Experimentar:

CREATE TABLE foo SELECT * FROM bar LIMIT 0

Ou:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0
Andomar
fonte
4
@Thunder: Tryselect * into foo from bar where 1=0
Andomar
29
Este não parece copiar os constrangimentos ou chaves
Timo HUOVINEN
15
@TimoHuovinen: Talvez create table NewTable like OldTableseja uma opção para você. Link copiado da resposta excluída.
Andomar 27/10
1
Tenha muito cuidado ao usar isso sob carga e com alta simultaneidade. Acabei de me queimar usando isso em escala, onde criamos cerca de 50 tabelas diferentes baseadas na mesma tabela de origem, ao mesmo tempo em que inserimos na tabela de origem outros processos. Basicamente, causou um colapso maciço de bloqueio e teve que reiniciar o MySQL.
Mark B
6
Uhm, OP está confuso? Esta é uma resposta grosseiramente errada à pergunta, se prestarmos atenção ao título e à ênfase na pergunta "... sem copiar os dados ..." A resposta da RCNell é a mais votada com razão. Não sei por que este foi aceito. Apenas dizendo'.
precisa saber é
421

Experimentar

CREATE TABLE foo LIKE bar;

para que as chaves e os índices também sejam copiados.

Documentação

RCNeil
fonte
40
Essa é uma resposta melhor, pois ela também copia os índices!
Chaitan
2
É muito melhor, mas ainda não copia chaves estrangeiras.
Josef Sábl
@RCNeil, também CREATE TABLE new_tbl LIKE orig_tbl;copia privilégios? Ou eles devem ser copiados manualmente?
Pacerier
2
Provavelmente porque esta resposta veio quatro anos mais tarde do que o marcado como correta
pythonian29033
1
@ Pierre-OlivierVares O texto da documentação não é diretamente relevante para a resposta real. O texto da resposta é conciso ao mostrar como fazer a pergunta, enquanto o link da documentação fornece apenas um contexto adicional. Como tal, inchar a resposta com o texto da documentação não é útil.
precisa saber é o seguinte
27
SHOW CREATE TABLE bar;

você receberá uma instrução create para essa tabela, editará o nome da tabela ou qualquer outra coisa que desejar e, em seguida, executará.

Isso permitirá que você copie os índices e também ajuste manualmente a criação da tabela.

Você também pode executar a consulta em um programa.

Timo Huovinen
fonte
Como você pode converter show create table barem uma declaração executável dinamicamente?
Pacerier 02/02
o resultado fornecido por show create table barjá é executável; se o script tiver permissão para criar tabelas, você poderá analisá-lo e executar também as instruções alter table.
Timo Huovinen
create table...não copiará índices. esta resposta é a melhor opção
bluepinto 27/09/19
2

Deseja apenas clonar a estrutura da tabela:

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

Também deseja copiar os dados:

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