2010-03-17 7 views

Répondre

26

La solution de Zerkms n'a pas fonctionné pour moi. J'ai dû spécifier la base de données information_schema pour pouvoir interroger la table Tables.

SELECT 
    CONCAT('RENAME TABLE ', GROUP_CONCAT('`', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`')) AS q 
FROM 
    `information_schema`.`Tables` WHERE TABLE_SCHEMA='test'; 

Edit:

optimisé la requête uniquement appel RENAME TABLE une fois. Quelque chose que je suis entré dans le fait que la sortie concaténée a été tronqué à 341 caractères. Ceci peut être résolu (si permis par votre serveur) en définissant la variable MySQL group_concat_max_len à une valeur plus élevée:

SET group_concat_max_len = 3072; -- UTF8 assumes each character will take 3 bytes, so 3072/3 = 1024 characters. 
+0

C'est vrai, cela a fonctionné pour moi puisque je travaillais sur localhost XAMPP en utilisant Joomla et je voulais changer en préfixe automatique Joomla. Je suis vos pas, j'ai dû spécifier le 'information_schema'.'Tables' comme vous l'avez fait et définir SET group_concat_max_len = 10240; dans mon cas car il y avait beaucoup de tables. +1 – MJoraid

+1

Encore un point, vous pouvez utiliser la même commande pour déplacer la table à travers les bases de données (disons backup_db) comme: 'SELECT CONCAT ('RENAME TABLE', TABLE_NAME, 'TO backup_db.', TABLE_NAME, ';') FROM INFORMATION_SCHEMA. TABLES WHERE table_schema = 'testbot'; ' – sactiw

+0

super point l'édition de la variable' group_concat_max_len'! Je n'obtenais pas la phrase complète ni, a bien fonctionné! – AlexGH

21

écrire un script qui exécutera RENAME TABLE pour chaque table.

SELECT 
    GROUP_CONCAT('RENAME TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`;' SEPARATOR ' ') 
FROM 
    `TABLES` WHERE `TABLE_SCHEMA` = "test"; 

où « test » devrait nom de la base

après cela, vous pouvez longue requête qui ajouter des préfixes si vous l'exécutez ;-)

3

Vous pouvez simplement vider la base de données, ouvrez la décharge avec un éditeur de texte, remplacez toutes les occurrences de "CREATE TABLE" par "CREATE TABLE dp_" et restaurez la base de données. Cela prend quelques minutes à faire.

+2

jusqu'à ce que la base de données est inférieure à quelques gigaoctets ;-) – zerkms

+0

Je suis un jeu. :) Pour les bases de données supérieures à un GB, utilisez un outil de requête (SQL Workbench, par exemple), sélectionnez toutes les tables de la liste, copiez le contenu dans la colonne A d'une feuille de calcul (dans mon cas, Calc) et mettez Formule dans la colonne B: = "renommer la table" & A1 & "à dp_" & A1 & "; "Colle la formule de la cellule B1 dans chaque autre cellule de la colonne B et le script de renommage apparaît dans la colonne B! –

+0

comme je l'ai dit dans ma réponse - un moyen approprié de renommer est d'utiliser RENAME TABLE (+ information_shema pour récupérer les noms des tables) – zerkms

10

PhpMyAdmin vous permet de le faire maintenant. Au niveau "Base de données", sélectionnez l'onglet Structure pour voir toutes les tables. Cliquez sur "cocher tout" (sous la liste du tableau). Dans la liste déroulante "Avec sélection", sélectionnez: "Remplacer le préfixe de la table".

Questions connexes