112 votes

Renommer la base de données MySQL

J'ai créé une base de données avec le nom de hrms . Maintenant, je dois changer le nom de la base de données en sunhrm . Mais, il est désactivé dans MySQL workbench. Puis-je le faire sur le serveur Linux lui-même ?

0 votes

Quelle version de mysql utilisez-vous ?

0 votes

@Joachim Isaksson J'utilise mysql 5.5

0 votes

68voto

jan Points 657

Si vous devez le faire à partir de la ligne de commande, il suffit de copier, d'adapter et de coller cet extrait :

mysql -e "CREATE DATABASE \`new_database\`;"
for table in `mysql -B -N -e "SHOW TABLES;" old_database`
do 
  mysql -e "RENAME TABLE \`old_database\`.\`$table\` to \`new_database\`.\`$table\`"
done
mysql -e "DROP DATABASE \`old_database\`;"

18 votes

Notez que cela ne concerne que les tables. Les vues et les procédures stockées doivent être effectuées séparément.

6 votes

Version un peu plus facile à utiliser de ce script : gist.github.com/tadas-s/5411299

1 votes

Voici une autre façon de créer une commande de renommage de table en SQL dans le cadre direct de MySQL : blog.marceloaltmann.com/how-to-rename-a-database-in-mysql

61voto

New Alexandria Points 3106

Je ne pense pas que tu puisses faire ça. Les réponses de base fonctionneront dans de nombreux cas, et dans d'autres, elles provoqueront des corruptions de données. Il faut choisir une stratégie basée sur une analyse heuristique de votre base de données. C'est la raison pour laquelle cette fonctionnalité a été mise en place, et ensuite retiré . [ doc ]

Vous devrez jeter tous les types d'objets dans cette base de données, créer la nouvelle base nommée et importer le dump. S'il s'agit d'un système actif, vous devrez le démonter. Si vous ne pouvez pas, vous devrez alors configurer la réplication de cette base de données vers la nouvelle.

Si vous voulez voir les commandes qui pourraient faire ça, @satishD a les détails qui présente certains des défis autour desquels vous devrez élaborer une stratégie adaptée à votre base de données cible.

11 votes

Cela a-t-il un sens ? Pourquoi le développeur de MySQL a-t-il omis une option aussi importante ?

0 votes

Cela pourrait être une raison pour le marketing. De nombreux fournisseurs d'hébergement MySQL vous proposent un nom de base de données gratuit mais aléatoire et banal, mais si vous souhaitez le renommer en quelque chose de simple et de lisible, vous devez payer pour cela.

35voto

Il est possible de copier la base de données via la commande mysqldump sans stocker le dump dans un fichier :

  1. mysql -u root -p -e "create database my_new_database"
  2. mysqldump -u root -p original_database | mysql -u root -p my_new_database
  3. mysql -u root -p -e "drop database original_database"

33voto

jetole Points 299

Vous pouvez créer une nouvelle base de données exactement comme la précédente, puis supprimer l'ancienne base de données lorsque vous avez terminé. Utilisez l'outil mysqldump pour créer une sauvegarde .sql de la base de données via mysqldump orig_db > orig_db.sql ou si vous avez besoin d'utiliser un nom d'utilisateur et un mot de passe, exécutez mysqldump -u root -p orig_db > orig_db.sql . orig_db est le nom de la base de données que vous voulez "renommer", Root serait l'utilisateur sous lequel vous vous connectez et orig_db.sql serait le fichier créé contenant la sauvegarde. Maintenant, créez une nouvelle base de données vide avec le nom que vous voulez pour la base de données. Par exemple, mysql -u root -p -e "create database new_db" . Une fois que c'est fait, exécutez mysql -u root -p new_db < orig_db.sql . new_db existe maintenant comme une copie parfaite de orig_db. Vous pouvez alors abandonner la base de données originale car elle existe maintenant dans la nouvelle base de données avec le nom de base de données que vous vouliez.

Les étapes courtes et rapides sans toutes les explications ci-dessus sont :

  1. mysqldump -u root -p original_database > original_database.sql
  2. mysql -u root -p -e "create database my_new_database"
  3. mysql -u root -p my_new_database < original_database.sql
  4. mysql -u root -p -e drop database originl_database

J'espère que cela vous aidera et qu'il s'agit d'un moyen fiable d'y parvenir sans utiliser une méthode ad hoc qui corrompra vos données et créera des incohérences.

0 votes

Concis, sûr, a fonctionné le mieux pour moi (sur des DB simples sans triggers)

2 votes

Il suffit de créer la base de données et de transférer les résultats de l'une à l'autre : mysqldump -u root -p old_db|mysql -u root -p new_db .

0 votes

Vous devrez peut-être modifier le original_database.sql et commentez l'élément CREATE DATABASE … y USE … en haut, pour éviter de créer/utiliser la base de données originale.

22voto

Cristian Porta Points 752

Vous pouvez le faire par l'instruction RENAME pour chaque table dans votre "current_db" après avoir créé le nouveau schéma "other_db".

RENAME TABLE current_db.tbl_name TO other_db.tbl_name

Source : Syntaxe du tableau de renommage

5 votes

"Cette déclaration a été ajoutée dans MySQL 5.1.7 mais a été jugée dangereuse et a été supprimée dans MySQL 5.1.23". dev.mysql.com/doc/refman/5.1/fr/renommer-base-de-données.html

14 votes

Bonjour mikeslattery, ma déclaration est un RENAME TABLE et non un RENAME DATABASE ou SCHEMA.

0 votes

Pffft, oops. Désolé. :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X