web-dev-qa-db-fra.com

Comment puis-je changer les préfixes dans toutes les tables de ma base de données MySQL?

Mon fournisseur a installé sur mon site Drupal CMS. Maintenant, j'ai besoin de copier toutes mes données de l'ancien site. J'ai des tables sans préfixes dans mon ancienne base de données, mais dans la nouvelle base de données toutes les tables ont dp_[table_name] préfixe.

25
SkyFox

la solution zerkms n'a pas fonctionné pour moi. J'ai dû spécifier le information_schema base de données 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';

Modifier:

Optimisation de la requête pour n'appeler RENAME TABLE qu'une seule fois. Quelque chose dans lequel je suis entré est le fait que la sortie concaténée a été tronquée à 341 caractères. Cela peut être résolu (si votre serveur l'autorise) 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.
28
Koen.

é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" est le nom attendu de la base de données

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

21
zerkms

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 "Tout vérifier" (sous la liste du tableau). Dans le menu déroulant "Avec sélectionné", choisissez: "Remplacer le préfixe de table".

16
foray

Vous pouvez simplement vider la base de données, ouvrir le vidage avec un éditeur de texte, remplacer toutes les occurrences de "CREATE TABLE" par "CREATE TABLE dp_" et restaurer la base de données. Cela prend quelques minutes à faire.

S'il y a quelqu'un là-bas qui se demande encore comment faire cela (car cela n'a pas fonctionné des autres options), vous pouvez l'exécuter (en changeant les trois premières variables pour vos valeurs, bien sûr):

SET @database   = "database_name"; 
SET @old_prefix = "old_prefix_"; 
SET @new_prefix = "new_prefix_";
   SELECT
    concat(
        "RENAME TABLE ",
        TABLE_NAME,
        " TO ",
        replace(TABLE_NAME, @old_prefix, @new_prefix),
        ';'
    ) AS "SQL" FROM information_schema.TABLES WHERE TABLE_SCHEMA = @database;

Et puis vous serez invité avec un tas de requêtes nécessaires pour changer toutes les tables de votre base de données. Vous devez simplement copier cela, l'exécuter et voilá!

0
Juli15