Voici une petite astuce pour cloner une table (My)SQL en effectuant une copie de la table à l’identique. Index, types et données, tout est préservé.

Rien de sorcier, juste un peu de logique.
Premièrement on crée la nouvelle table (table_clonee) à partir de la table_source :
CREATE TABLE table_clonee LIKE table_source ;
Puis nous insérons les données dans la nouvelle table en « lisant » celles de la table_source
INSERT INTO table_clonee SELECT * FROM table_source ;
Simple et efficace.
Note : cela doit fonctionner également sur d’autres moteurs de bases de données, moyennant quelques adaptations syntaxiques
Auteur : Mr Xhark
Fondateur du blog et passionné par les technologies je partage mes découvertes quotidiennement.








Déjà 6 commentaires
8 juin 2010 à 14h20
Attention il y a une limite à ça !! Pour les tables contenant des clés étrangères, celles-ci ne sont pas copiées. Il faut donc faire attention à recréer les contraintes sur la nouvelle table si on veut qu’elle se comporte de la même manière que l’ancienne !!
Sinon c’est très utile lorsqu’on met à jour des données régulièrement et que la mise à jour prends du temps. On insère ainsi les données dans la nouvelle table et on renomme ensuite les tables de cette façon :
RENAME table_source AS table_source_before, table_clonee AS table_source;
Plus qu’à supprimer la table table_source_before et le tour est joué !!
8 juin 2010 à 14h25
@Nico : dans le cas où ta table comporte des clés il est fortement conseillé de faire un export de la structure l’ancienne table puis de créer une nouvelle table dans laquelle tu injecteras les données.
Personnellement je me sers de ce genre de manip pour archiver des données. Cela me permet de purger les tables principales et de garder une trace des données dans des tables d’archives.
Mais ta remarque est tout à fait pertinente.
8 juin 2010 à 18h02
Très bien,
mais ça créé avec le moteur de base de données par défaut (généralement MyISAM),
si vous copiez une base INNODB,
ça en fait une copie sous MyISAM
(et réciproquement)…
Donc astuce intéressante, mais attention au moteur par défaut !
8 juin 2010 à 20h43
@marcelus : de mon côté lorsque je copie une table le type est préservé, et cela me paraît tout à fait logique vu que le type est dans la structure (qui est copiée).
Peut-être cela dépend des configurations ? as-tu essayé chez toi ?
8 juin 2010 à 20h54
Autant pour moi (tu peux enlever mon post)
j’avais mal lu (et répondu de mémoire) dans
« Audit et optimisation de MySQL 5 -
bonnes pratiques pour l’administrateur »
(page 55)
C’est l’instruction :
CREATE TABLE table_clonee SELECT * FROM table_source ;
qui ne copie pas les index ni le moteur…
(Donc, très bonne ton astuce !)
21 novembre 2011 à 23h11
J’avais commencé à faire un script PHP mais c’est bcp plus simple directement sur le SGBD.
Merci bcp !