MySQL - Cloner des tables

Il peut y avoir une situation où vous avez besoin d'une copie exacte d'un tableau et CREATE TABLE ... SELECT ne convient pas à vos objectifs car la copie doit inclure les mêmes index, valeurs par défaut, etc.

Vous pouvez gérer cette situation en suivant les étapes ci-dessous -

  • Utilisez SHOW CREATE TABLE pour obtenir une instruction CREATE TABLE qui spécifie la structure, les index et tout de la table source.

  • Modifiez l'instruction pour remplacer le nom de la table par celui de la table clone et exécutez l'instruction. De cette façon, vous aurez la table de clonage exacte.

  • Si vous avez également besoin de copier le contenu de la table, émettez également une instruction INSERT INTO ... SELECT.

Exemple

Essayez l'exemple suivant pour créer une table de clonage pour tutorials_tbl.

Step 1 - Obtenez la structure complète de la table.

mysql> 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)

ERROR:
No query specified

Step 2 - Renommez cette table et créez une autre table.

mysql> 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- Après avoir exécuté l'étape 2, vous allez créer une table clone dans votre base de données. Si vous souhaitez copier des données de l'ancienne table, vous pouvez le faire à l'aide de l'instruction INSERT INTO ... SELECT.

mysql> 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

Enfin, vous aurez une table de clonage exacte comme vous le souhaitiez.