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: