MySQLi - Cloner des tables

Il peut y avoir une situation où vous avez besoin d'une copie exacte d'une table 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 -

  • 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 une 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_inf.

Étape 1

Obtenez une structure complète sur la table.

mysql> SHOW CREATE TABLE tutorials_inf \G;
*************************** 1. row ***************************
       Table: tutorials_inf
Create Table: CREATE TABLE `tutorials_inf` (
   `id` int(11) NOT NULL,
   `name` varchar(20) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `AUTHOR_INDEX` (`name`),
   UNIQUE KEY `NAME_INDEX` (`name`),
   KEY `id` (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1
1 row in set (0.05 sec)

ERROR: No query specified

Étape 2

Renommez cette table et créez une autre table.

mysql> CREATE TABLE tutorials_clone(
   -> id int(11) NOT NULL,
   -> name varchar(20) NOT NULL,
   -> PRIMARY KEY (id),
   > UNIQUE KEY AUTHOR_INDEX (name),
   -> UNIQUE KEY NAME_INDEX (name),
   ->  KEY id (id));
Query OK, 0 rows affected (1.80 sec)

Étape 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 les données de l'ancienne table, vous pouvez le faire à l'aide de l'instruction INSERT INTO ... SELECT.

mysql> INSERT INTO tutorials_clone(id,name) SELECT id,name from tutorials_inf;
Query OK, 4 rows affected (0.19 sec)
Records: 4  Duplicates: 0  Warnings: 0

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