2010-04-15 7 views
2

Je peux exécuter RENAME TABLE student TO student_new ;
La commande est identique et facile à suivre.Commande SQL RENAME TABLE

Existe-t-il une méthode pour renommer un grand nombre de tables en commande simple. Supposons que toutes les tables appartiennent au même nom de base de données.

Je n'ai pas besoin d'écrire beaucoup de code comme ci-dessous?

RENAME TABLE pre_access TO pre_new_access; 
RENAME TABLE pre_activities TO pre_new_activities; 
RENAME TABLE pre_activityapplies TO pre_new_activityapplies; 
RENAME TABLE pre_adminactions TO pre_new_adminactions; 
RENAME TABLE pre_admincustom TO pre_new_admincustom; 
RENAME TABLE pre_admingroups TO pre_new_admingroups; 
RENAME TABLE pre_adminnotes TO pre_new_adminnotes; 
... 

(il y a encore tant de tables doivent être renommés)

Mise à jour: MySQL utilisé.

+2

Vous devriez être en mesure de générer ce script, mais cela dépend de la base de données que vous utilisez ... –

+0

Vous pouvez ajouter dans le fait que vous voulez exécuter cette commande à partir de votre ligne de commande SQL. –

Répondre

5

En supposant que vous utilisiez MySQL, vous devriez être en mesure de "sélectionner" les instructions nécessaires de information_schema.tables qui contient une liste de vos tables.

Remplacez your_schema par votre nom de schéma et vérifiez les lignes sélectionnées avant de les exécuter.

Select Concat('RENAME TABLE ', table_name, ' TO ', 'new_', table_name, ';') 
From information_schema.tables 
Where table_schema = 'your_schema'; 

retours

RENAME TABLE c_data TO new_c_data; 
RENAME TABLE c_main TO new_c_main; 
... 
2

Vous pouvez toujours générer un script PHP simple qui boucle les bases de données et les renomme en fonction d'une expression REGEX.

+0

Bonjour, J'utilise PHPMyAdmin. Je veux utiliser la fenêtre de commande SQL avec le script SQL. Pas scritp PHP. J'ai appris un peu de Perl. Mais je connais peu de commande SQL. Merci. –

+1

Eh bien, grâce à phpMyAdmin seul, je ne pense pas que vous allez avoir beaucoup de chance. Si vous pouvez vous connecter à la base de données avec Perl et sélectionner toutes les bases de données, vous pouvez les mettre à jour pour ajouter _new à la première strpos() d'un _. –

1

Vous ne mentionnez pas ce que la base de données que vous utilisez, et c'est la base de données complètement dépendante (certains DBMSes ne vous permettent même de changer le nom des tables). Cependant, je ne connais aucun système de SGBD qui permette d'utiliser des caractères génériques dans une commande RENAME, alors oui, vous devrez probablement envoyer chaque commande séparément.

+0

Désolé pour ça. MySQL utilisé. –

0

pour la base de données MySQL « test » devrait fonctionner:

echo "show tables"|mysql test|perl -ne 'if(/pre_(\w+)/){print "rename table pre_$1 to pre_new_$1;\n"}'|mysql test