una tabla por otra estructura duplicar datos copiar contenido consola mysql

mysql - por - duplicar tabla sql



Duplicar una tabla MySQL, índices y datos. (8)

Ampliando esta respuesta se podría usar un procedimiento almacenado:

CALL duplicate_table(''tableName'');

Lo que dará como resultado una tabla duplicada llamada tableName_20181022235959 Si se llama cuando

SELECT NOW();

resultados:

2018-10-22 23:59:59

Implementación

CREATE PROCEDURE duplicate_table(IN tableName VARCHAR(255)) BEGIN DECLARE schemaName VARCHAR(255) DEFAULT SCHEMA(); DECLARE today VARCHAR(14) DEFAULT REPLACE(REPLACE(REPLACE(NOW(), ''-'', ''''), '' '', ''''), '':'', ''''); -- update @ year 10000 DECLARE backupTableName VARCHAR(255) DEFAULT CONCAT(tableName, ''_'', today); IF fn_table_exists(schemaName, tableName) THEN CALL statement(CONCAT(''CREATE TABLE IF NOT EXISTS '', backupTableName,'' LIKE '', tableName)); CALL statement(CONCAT(''INSERT INTO '', backupTableName,'' SELECT * FROM '', tableName)); CALL statement(CONCAT(''CHECKSUM TABLE '', backupTableName,'', '', tableName)); ELSE SELECT CONCAT(''ERROR: Table "'', tableName, ''" does not exist in the schema "'', schemaName, ''".'') AS ErrorMessage; END IF; END ;

CREATE FUNCTION fn_table_exists(schemaName VARCHAR(255), tableName VARCHAR(255)) RETURNS TINYINT(1) BEGIN DECLARE totalTablesCount INT DEFAULT ( SELECT COUNT(*) FROM information_schema.TABLES WHERE (TABLE_SCHEMA COLLATE utf8_general_ci = schemaName COLLATE utf8_general_ci) AND (TABLE_NAME COLLATE utf8_general_ci = tableName COLLATE utf8_general_ci) ); RETURN IF( totalTablesCount > 0, TRUE, FALSE ); END ;

CREATE PROCEDURE statement(IN dynamic_statement TEXT) BEGIN SET @dynamic_statement := dynamic_statement; PREPARE prepared_statement FROM @dynamic_statement; EXECUTE prepared_statement; DEALLOCATE PREPARE prepared_statement; END ;

¿Cómo copio / cloné / duplicé los datos, la estructura y los índices de una tabla MySQL en una nueva?

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};


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

CREATE TABLE tbl_new AS SELECT * FROM tbl_old;


Después de probar la solución anterior. Yo vengo con mi propio camino.

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

Primero exportar los datos.

segundo abrir los datos de exportación.

tercero reemplazar el nombre antiguo de la tabla con el nuevo nombre de la tabla.

cuarto cambio todo el nombre del disparador en los datos (uso mysql y muestra un error cuando no cambio el nombre del disparador)

quinto importar sus datos sql editados a la base de datos.


Encontré la misma situación y el enfoque que adopté fue el siguiente: 1. Ejecutar MOSTRAR CREAR TABLA: Esto le dará la sintaxis de Crear tabla para la tabla que desea clonar 2. Ejecute la consulta CREAR TABLA cambiando el nombre de la tabla para clonar la mesa.

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


MySQL Way

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


Para MySQL

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

PARA MSSQL Use MyDatabase :

Select * into newCustomersTable from oldCustomersTable;

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


Para copiar con índices y disparadores realice estas 2 consultas:

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

Para copiar solo la estructura y los datos use este:

CREATE TABLE tbl_new AS SELECT * FROM tbl_old;

He preguntado esto antes:

Copia una tabla MySQL incluyendo índices


Vaya a phpMyAdmin y seleccione su tabla original, luego seleccione la pestaña " Operaciones " en el área '' Copiar tabla a (base de datos) '', seleccione la base de datos donde desea copiar y agregue un nombre para su nueva tabla.