Mon fournisseur 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éfixe dans mon ancien DB, mais dans le nouveau DB toutes les tables ont le préfixe dp_[table_name]
.Comment puis-je changer les préfixes dans toutes les tables de ma base de données MySQL?
Répondre
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.
é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 ;-)
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.
jusqu'à ce que la base de données est inférieure à quelques gigaoctets ;-) – zerkms
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! –
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
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".
- 1. Comment changer toutes les tables de ma base de données en jeu de caractères UTF8?
- 2. Comment supprimer toutes les tables dans MySQL?
- 3. Comment puis-je supprimer toutes les tables de ma base de données?
- 4. instruction SQL tronque toutes les données de toutes les tables de la base de données
- 5. Sqlite: Comment réinitialiser toutes les tables de base de données?
- 6. NHibernate: récupère toutes les données de toutes les tables de base de données
- 7. Vider les tables de la base de données dans mysql?
- 8. longueur de la colonne à travers toutes les tables dans une base de données MySQL
- 9. sélection de la première colonne de toutes les tables dans une base de données mysql
- 10. SQL: supprimer toutes les données de toutes les tables disponibles
- 11. joignant toutes les colonnes de deux tables dans mysql conditionnellement
- 12. Mysql: Obtenir les résultats de toutes les tables
- 13. Sélectionnez le nombre de lignes dans toutes les tables de la base de données
- 14. préfixes de base de données sql
- 15. Comment définir la spécification d'audit de base de données pour toutes les tables dans db
- 16. Comment puis-je supprimer le contenu de toutes les tables dans ma base de données dans phpMyAdmin sans laisser tomber la base de données?
- 17. Comment écrire une requête SQL qui recherche une valeur dans toutes les colonnes et toutes les tables de ma base de données?
- 18. Des tables inattendues apparaissant dans ma base de données SQLite
- 19. PDO - Travailler avec les préfixes de table
- 20. Django: Comment obtenir toutes les tables et toutes les colonnes de cette table dans un projet?
- 21. J'ai 2 tables MySql. Comment obtenir toutes les données d'eux dans une requête de 1 sql?
- 22. Comment récupérer les noms de tables de la base de données dans mysql?
- 23. Comment voir toutes les tables dans une base de données HSQLDB?
- 24. Tableaux dans les tables de base de données et normalisation
- 25. Comment afficher les tables créées dans une base de données
- 26. Obtenir des schémas MySQL pour toutes les tables
- 27. Comment puis-je obtenir le nom de toutes les tables d'une base de données JavaDB?
- 28. Comment récupérer les noms de tables dans une base de données mysql avec Python et MySQLdb?
- 29. Puis-je ajouter d'autres tables dans ma base de données?
- 30. Extrait toutes les données à partir d'une base de données
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
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
super point l'édition de la variable' group_concat_max_len'! Je n'obtenais pas la phrase complète ni, a bien fonctionné! – AlexGH