2010-07-19 26 views
433

¿Cómo copio/clono/duplico los datos, la estructura y los índices de una tabla MySQL a una nueva?Duplicar una tabla MySQL, índices y datos

Esto es lo que he encontrado hasta ahora.

Esto copiará los datos y la estructura, pero no los índices:

create table {new_table} select * from {old_table}; 

Esto copiará la estructura y los índices, pero no los datos:

create table {new_table} like {old_table}; 
+2

posible duplicado de [ejecutar MySQL en Crear una tabla seleccionar otro y copiar los índices automáticamente] (http://stackoverflow.com/questions/2415855/run-mysql-create-table-by-select- another-and-copy-the-indexes-automatically) –

Respuesta

970

Para copiar con índices y disparadores hacer estas 2 preguntas:

CREATE TABLE newtable LIKE oldtable; 
INSERT newtable SELECT * FROM oldtable; 

Para copiar la estructura justa y datos de uso de éste:

CREATE TABLE tbl_new AS SELECT * FROM tbl_old; 

le he pedido esto antes:

Copy a MySQL table including indexes

+24

En esta situación, debe marcar la nueva pregunta como un duplicado, en lugar de copiar una respuesta. Sin embargo, ahora esta pregunta ha recibido mucha más atención (y está mejor escrita y es más fácil de encontrar), así que he marcado su pregunta anterior como una estafa. – TRiG

+5

Merece la pena señalar que las claves externas que señalan a oldtable deberán copiarse en newtable (si está reemplazando a la tabla antigua) – George

+2

¿Funciona esto para las tablas grandes (millones de registros)? ... Lo pregunto porque no sé cómo esto 'select *' funcionará en tablas enormes. – fguillen

38

Aparte de la solución anterior, puede utilizar AS hacerlo en una sola línea.

CREATE TABLE tbl_new AS SELECT * FROM tbl_old; 
+21

Esto no copiará los índices y disparadores ya que el resultado SELECCIONAR es una tabla temporal (sin nombre) y no "transporta" los metadatos de la tabla fuente. Considere si estaría usando funciones, no tendría sentido. – chx

+1

Estaba buscando hacer una copia de seguridad de la tabla de estructura y mover solo los datos, cayendo así los índices/restricciones/etc. para poder recrearlos. Esta respuesta fue increíble en ese sentido, ya que Google me envió aquí. – Ellesedil

+0

esto es exactamente lo que ya menciona en la pregunta: ** 'create table {new_table} select * from {old_table};' ** no es una respuesta y no proporciona información nueva. – billynoah

-3

para MySQL

CREATE TABLE newtable LIKE oldtable ; 
INSERT newtable SELECT * FROM oldtable ; 

PARA MSSQL Uso MyDatabase:

Select * into newCustomersTable from oldCustomersTable; 

Este SQL se utiliza para copiar tablas, aquí el contenido de oldCustomersTable se copiarán en newCustomersTable.
Asegúrese de que newCustomersTableno existe en la base de datos.

+3

Error de Thows Error de SQL (3172): variable no declarada: 'newCustomerTable' – mikewasmike

+0

Debe estar haciendo algo mal. Como esto funcionará al 100%. Lea antes de dar un voto negativo. Referencia de contenido para ti http://www.w3schools.com/sql/sql_select_into.asp – Krishneil

+1

Tenga en cuenta que la pregunta es sobre MySQL. Es posible que algunas sintaxis SQL no sean compatibles. – mikewasmike

1

encontré la misma situación y el enfoque que tomé fue el siguiente: 1. Ejecutar SHOW CREATE TABLE: Esto le dará la sintaxis Crear tabla para la tabla que desea clonar 2. Ejecutar el CREATE TABLE consulta cambiando el nombre de la tabla para clonar la tabla.

Esto creará la réplica exacta de la tabla que desea clonar junto con Índices. Lo único que necesita es cambiar el nombre de los índices (si es necesario).

2

MySQL Camino

CREATE TABLE recipes_new LIKE production.recipes; INSERT recipes_new SELECT * FROM production.recipes; 
1

Después trató la solución anterior. Vengo a mi manera.

Mi solución es un poco manual y necesito DBMS.

Primero exporte los datos.

segundo abra los datos de exportación.

reemplaza el nombre de la tabla anterior con el nombre de la tabla nueva.

cuarto cambio de todo el nombre del disparador en los datos (utilizo MySQL y muestro error al no cambio el nombre del disparador)

quinta importar sus datos SQL editado a la base de datos.

2

Ir a phpMyAdmin y seleccione la tabla original a continuación, seleccione "Operaciones " En la solapa 'Copiar tabla de (database.table)' zona seleccione la base de datos en la que desea copiar y añadir un nombre para tu nueva mesa

copy table - phyMyAdmin Screenshot

Cuestiones relacionadas