Copiar tabla sin copiar datos

153
CREATE TABLE foo SELECT * FROM bar

copia la tabla fooy la duplica como una nueva tabla llamada bar.

¿Cómo puedo copiar el esquema de foouna nueva tabla llamada bar sin copiar también los datos?

Mateo
fuente
1
¿Cómo hacer lo mismo en sqlserver 2005?
Trueno
que significa bar?
Smit Saraiya
1
@SmitSaraiya, fooy barson variables arbitrarias sin sentido , muy parecidas a Alice y Bob .
Chris
Parece que @Thunder puede hacer una copia de "Solo columnas" en MS SQL. Consulte esto como referencia: stackoverflow.com/questions/2505728/…
Kevin Worthington

Respuestas:

140

Tratar:

CREATE TABLE foo SELECT * FROM bar LIMIT 0

O:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0
Andomar
fuente
44
@Thunder: Probarselect * into foo from bar where 1=0
Andomar
29
Esto no parece copiar las restricciones o claves
Timo Huovinen
15
@TimoHuovinen: Quizás create table NewTable like OldTablesea ​​una opción para ti. Enlace copiado de la respuesta eliminada.
Andomar
1
Tenga mucho cuidado al usar esto bajo carga y con alta concurrencia. Acabo de quemarme usando esto a escala, donde creamos alrededor de 50 tablas diferentes basadas en la misma tabla fuente, al mismo tiempo que insertamos en la tabla fuente desde otros procesos. Básicamente causó una fusión masiva de bloqueos y tuvo que reiniciar MySQL.
Mark B
66
Uhm, OP está confundido? Esta es descaradamente una respuesta incorrecta a la pregunta, si prestamos atención al título y al énfasis en la pregunta "... sin copiar los datos ..." La respuesta de RCNell es justamente la más votada. No estoy seguro de por qué este fue aceptado. Sólo digo'.
xyphenor
421

Tratar

CREATE TABLE foo LIKE bar;

así que las claves y los índices también se copian.

Documentación

RCNeil
fuente
40
¡Esta es una mejor respuesta ya que esto también copia los índices!
Chaitán
2
Es mucho mejor, pero aún no copia claves foráneas.
Josef Sábl
@RCNeil, ¿ CREATE TABLE new_tbl LIKE orig_tbl;Copias privilegios también? ¿O deben copiarse manualmente?
Pacerier
2
Probablemente porque esta respuesta llegó 4 años después que la marcada como correcta
pythonian29033
1
@ Pierre-OlivierVares El texto de la documentación no es directamente relevante para la respuesta real. El texto de respuesta es conciso para mostrar cómo hacer lo que se hizo la pregunta, mientras que el enlace de documentación simplemente proporciona un contexto adicional. Como tal, hinchar la respuesta con el texto de la documentación no es útil.
Abion47
27
SHOW CREATE TABLE bar;

obtendrá una declaración de creación para esa tabla, editará el nombre de la tabla o cualquier otra cosa que desee y luego ejecútela.

Esto le permitirá copiar los índices y también ajustar manualmente la creación de la tabla.

También puede ejecutar la consulta dentro de un programa.

Timo Huovinen
fuente
¿Cómo podría convertirse show create table baren una declaración ejecutable dinámicamente?
Pacerier
el resultado dado por show create table barya es ejecutable, si el script tiene el permiso para crear tablas, puede analizarlo y luego ejecutar también las declaraciones de alterar tabla.
Timo Huovinen
create table...no copiará índices. esta respuesta es la mejor opción
bluepinto
2

Solo quiero clonar la estructura de la tabla:

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

También quiere copiar los datos:

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