Quiero copiar una tabla en MySQL. ¿Cuál es la forma más rápida? ¿Me gusta esto?
CREATE TABLE copy LIKE original;
INSERT INTO copy SELECT * FROM original;
o
CREATE TABLE copy SELECT * FROM original;
ALTER TABLE copy ADD PRIMARY KEY (id);
¿O hay otra manera?
EDITAR: Me preocupa que se vuelvan a crear los índices, ¿cómo procede mysql a ejecutar estas declaraciones?
PD. no puede usar herramientas de línea de comandos como mysqldump, debe estar sobre la marcha.
La forma más rápida de usar tablas MyISAM conservando los índices ) y quizás otros motores de almacenamiento es:
CREATE TABLE copy LIKE original; ALTER TABLE copy DISABLE KEYS; INSERT INTO copy SELECT * FROM original; ALTER TABLE copy ENABLE KEYS;
Desea deshabilitar sus claves para la carga de su base de datos y luego volver a crear las claves al final.
Del mismo modo, para InnoDB :
SET unique_checks=0; SET foreign_key_checks=0; ..insert sql code here.. SET unique_checks=1; SET foreign_key_checks=1;
(Como se señaló en los comentarios).
fuente
ALTER TABLE table DISABLE/ENABLE KEYS
no funciona en InnoDB y da la siguiente advertenciaTable storage engine for 'table' doesn't have this option
.SET unique_checks=0; SET foreign_key_checks=0;
inserte el código sql aquíSET unique_checks=1; SET foreign_key_checks=1;
Del manual :
"CREATE TABLE ... SELECT no crea automáticamente ningún índice por ti. Esto se hace intencionalmente para que la declaración sea lo más flexible posible. Si quieres tener índices en la tabla creada, debes especificarlos antes de la declaración SELECT:"
CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
Puede especificar índices y tipos de datos (para evitar la conversión de tipos de datos) en ambos
CREATE TABLE LIKE
yCREATE TABLE SELECT
. Cuál es más rápido dependerá de su configuración.fuente
Para copiar con índices y activadores, haga 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;
fuente
INSERT INTO
lugar deINSERT
?¿
create table mynewtable (select * from myoldtable)
Funciona en mysql? Si es así, puedes probarlo también.fuente
La mejor manera de copiar la estructura y todas las entradas de una tabla a otra (creando una nueva tabla) es esta consulta ...
CREATE TABLE new_table LIKE old_table; INSERT new_table SELECT * FROM old_table;
fuente
Prueba
SELECT INTO
y usa una variable como intermediario.Primero, deberá crear la tabla receptora para que tenga la misma estructura que la tabla fuente.
Lo mejor es que es interno, por lo que es rápido. Sin embargo, perderá sus índices.
fuente
si está utilizando MyISAM, también puede copiar y cambiar el nombre de los archivos induviduales. Archivos .MYD, .MYI, .FRM en el backend
fuente
Tal vez podrías echarle un vistazo
SHOW CREATE TABLE
.Pasos a seguir:
Ir a phpmyadmin
Ir a SQL
Ejecuta esta consulta
SHOW CREATE TABLE `the_old_table`;
El resultado es una declaración CREATE TABLE completa. Edite la consulta hasta que esté satisfecho.
Recurso: http://dev.mysql.com/doc/refman/5.7/en/show-create-table.html
fuente
CREATE TABLE copy SELECT * FROM original;
Es una forma rápida, pero tal vez no sea la causa más rápida de índices.
fuente