2010-05-19 4 views
5

Quiero duplicar una tabla muy grande, pero no quiero copiarla fila por fila. ¿Hay alguna forma de duplicarlo?Tabla de duplicación en MYSQL sin copiar una fila a la vez

Por ejemplo, Puede limitar w/o eliminación de fila/fila, así que me preguntaba si hay algo similar para copiar tablas enteras

ACTUALIZACIÓN: fila por fila de inserción es muy doloroso (debido a 120M filas) . De todos modos para evitar eso?

Respuesta

5

MySQL ya no tiene una funcionalidad confiable de "tabla de copiado"; hay muchas razones para esto relacionadas con la forma en que se almacenan los datos. Sin embargo, el siguiente hace fila por fila de inserción, pero es bastante simple:

CREATE TABLE `new_table` LIKE `old_table`; 
INSERT INTO `new_table` (SELECT * FROM `old_table`); 
+1

1 para mí ninja'ing. [risas] – pinkgothic

+0

ouch. Tengo una mesa grande, y la inserción fila por fila es muy dolorosa –

+0

¡Odio eso! :) – AvatarKava

4

Usted podría utilizar INSERT INTO ... SELECT.

+0

Lamentablemente, esto no funcionará tan bien como la respuesta @AvatarKava proporcionada, ya que esto no copiará atributos como auto_increment ... –

+0

Mrh? Nuestras respuestas son idénticas, a excepción de que @ AvatarKava menciona la línea de creación de tabla que solo he dado a entender (que es también la razón por la que les he votado por votación ascendente), y yo a su vez se vinculó a la documentación. De lo contrario, estamos diciendo exactamente lo mismo. o. @; – pinkgothic

1
INSERT INTO TABLE2 SELECT * FROM TABLE1 
+0

Lamentablemente, esto no funcionará tan bien como la respuesta @AvatarKava proporcionada, ya que esto no copiará atributos como auto_increment ... –

+0

Bueno, la única manera de copiarlos es volver a crearlos ... pero cierto, eso solo ganó No hagas el truco. – modz0r

2

Si está utilizando MyISAM, puede copiar los archivos físicos en el disco. Reinicie el servicio y tendrá la nueva tabla con índices y todo igual.

+1

Estoy usando innodb. ¿Eso aplica? –

+0

lamentablemente no :( – AvatarKava

+0

¿por qué no? Curioso! –

1

No es trivial copiar una tabla grande; en última instancia, es probable que la base de datos necesite reconstruirla.

En InnoDB, la única manera es reconstruirlo, lo que significa insertar ... seleccionar o similar, sin embargo, con 120M filas ya que va a suceder en una sola transacción, es probable que exceda el tamaño de la reversión área, lo que hará que la inserción falle.

mysqldump seguido de cambiar el nombre de la tabla original y luego restaurar el volcado debería funcionar, ya que mysqldump puede provocar un compromiso cada montón de filas. Sin embargo, será lento.

0

oráculo:

crear tabla T como seleccionar * de original_table

Cuestiones relacionadas