SQL: tablas de clonación

Puede haber una situación en la que necesite una copia exacta de una tabla y los comandos CREATE TABLE ... o SELECT ... no se adapten a sus propósitos porque la copia debe incluir los mismos índices, valores predeterminados, etc.

Si está utilizando MySQL RDBMS, puede manejar esta situación siguiendo los pasos que se indican a continuación:

  • Utilice el comando SHOW CREATE TABLE para obtener una declaración CREATE TABLE que especifique la estructura de la tabla fuente, los índices y todo.

  • Modifique la declaración para cambiar el nombre de la tabla por el de la tabla de clonación y ejecute la declaración. De esta forma tendrás una tabla de clonación exacta.

  • Opcionalmente, si también necesita copiar el contenido de la tabla, emita también una instrucción INSERT INTO o SELECT.

Ejemplo

Pruebe el siguiente ejemplo para crear una tabla de clonación para TUTORIALS_TBL cuya estructura es la siguiente -

Step 1 - Obtenga la estructura completa sobre la mesa.

SQL> SHOW CREATE TABLE TUTORIALS_TBL \G; 
*************************** 1. row *************************** 
      Table: TUTORIALS_TBL 
Create Table: CREATE TABLE 'TUTORIALS_TBL' ( 
  'tutorial_id' int(11) NOT NULL auto_increment, 
  'tutorial_title' varchar(100) NOT NULL default '', 
  'tutorial_author' varchar(40) NOT NULL default '', 
  'submission_date' date default NULL, 
  PRIMARY KEY  ('tutorial_id'), 
  UNIQUE KEY 'AUTHOR_INDEX' ('tutorial_author') 
) TYPE = MyISAM 
1 row in set (0.00 sec)

Step 2 - Cambie el nombre de esta tabla y cree otra tabla.

SQL> CREATE TABLE `CLONE_TBL` ( 
  -> 'tutorial_id' int(11) NOT NULL auto_increment, 
  -> 'tutorial_title' varchar(100) NOT NULL default '', 
  -> 'tutorial_author' varchar(40) NOT NULL default '', 
  -> 'submission_date' date default NULL, 
  -> PRIMARY KEY  (`tutorial_id'), 
  -> UNIQUE KEY 'AUTHOR_INDEX' ('tutorial_author') 
-> ) TYPE = MyISAM; 
Query OK, 0 rows affected (1.80 sec)

Step 3- Después de ejecutar el paso 2, clonarás una tabla en tu base de datos. Si desea copiar datos de una tabla antigua, puede hacerlo mediante la instrucción INSERT INTO ... SELECT.

SQL> INSERT INTO CLONE_TBL (tutorial_id, 
   ->                        tutorial_title, 
   ->                        tutorial_author, 
   ->                        submission_date) 
   -> SELECT tutorial_id,tutorial_title, 
   ->        tutorial_author,submission_date, 
   -> FROM TUTORIALS_TBL; 
Query OK, 3 rows affected (0.07 sec) 
Records: 3  Duplicates: 0  Warnings: 0

Finalmente, tendrá una tabla de clonación exacta como deseaba tener.