IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Renommer massivement des tables


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 98
    Par défaut Renommer massivement des tables
    Bonjour,

    Je possède une base de données avec une centaine de tables.

    Parmi ces tables, une cinquantaine commence par bdd_ (pour les autres le début est différent).

    Existe-t-il une requête permettant de renommer dans la base toutes les tables commençant par bdd_ en sql_ sans toucher aux autres tables ?

    merci

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 063
    Par défaut
    Bonjour,

    La commande ALTER TABLE ne s'applique qu'à une seule table à la fois.
    En revanche, ce qui est possible, c'est d'interroger le catalogue, pour faire une requête qui génère automatiquement tous les ALTER TABLE des tables commençant par bdd_.
    Il suffit alors d'exécuter les résultats de cette requête.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Par défaut
    Allez, un petit coup de main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CONCAT('RENAME TABLE ', table_name, ' TO ' , CONCAT('sql_', SUBSTR(table_name, 5)), ';') INTO OUTFILE 't1.sql'
    FROM TABLES
    WHERE table_name LIKE 'BDD\_%'
    AND .... ;
    A tester, vérifier et compléter
    Après tu n'as qu'à exécuter le script généré.

    Rachid

  4. #4
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    l'idée c'est de faire une procédure stockée qui utilise un curseur pour balayer les noms de tables de la bd choisie dans informations_schema.tables (l'équivalent du show tables mais avec un select)...
    dans la boucle de lecture du curseur tu fais une requête préparée qui va faire l'alter table voulu sur chaque nom de table trouvé...

    attention, changer juste le nom d'une table dans informations_schema.tables ne va pas marcher car le alter table renomme aussi tous les fichiers qui définissent la table...

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Par défaut
    l'idée c'est de faire une procédure stockée qui utilise un curseur pour balayer les noms de tables de la bd choisie dans informations_schema.tables (l'équivalent du show tables mais avec un select)...
    dans la boucle de lecture du curseur tu fais une requête préparée qui va faire l'alter table voulu sur chaque nom de table trouvé...
    Pourquoi faire simple qu'on peut faire compliqué?!!!!

    La requête que j'ai donnée fait le boulot simplement et proprement

    attention, changer juste le nom d'une table dans informations_schema.tables ne va pas marcher car le alter table renomme aussi tous les fichiers qui définissent la table...
    La requête ne mets pas à jour la table information_schema.tables, mais elle génère à la volée des commandes "RENAME TABLE ..." qui permettent de renommer les tables.
    La commande "RENAME TABLE ..." est équivalente à la commande "ALTER TABLE ... RENAME ..."

    Rachid

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 98
    Par défaut
    Merci pour vos réponses.

    Grâce à vos informations, j'ai pu résoudre mon problème.

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 917
    Par défaut
    Salut maxime71360.

    Pourquoi un script BASH ?

    On peut faire cela dans une procédure stockée que vous lancez au travers d'un script SQL.
    Vous devez balayer le catalogue ("information_schema") de mysql, à la recherche de vos tables.
    Puis ensuite appliquer la construction de la requête qui va changer le nom de votre table.
    Son exécution devra se faire dans une requête préparée.
    --> https://dev.mysql.com/doc/refman/8.0...tatements.html

    Pour renommer un table, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table "oldname" rename "newname"
    --> https://dev.mysql.com/doc/refman/8.0...-examples.html

    La construction de la requête devra se faire par un concat() comme dans votre exemple.

    @+

  8. #8
    Nouveau candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Services de proximité

    Informations forums :
    Inscription : Janvier 2020
    Messages : 2
    Par défaut
    Bonjour Artemus et merci

    Je dois automatiser des manip actuellement faites à la main
    #étapes :
    # copie de base par sécu
    # copie table extraction pour historisation d'une année sur l'autre
    # modifie des tables retar_an_xxx_xx
    # vide la table extraction pour import fichier scsv
    # importation du fichier csv dans table extraction
    # modification du fichier de retarification2.ctrl.php
    # exécution des commandes en changeant le nom produit à chaque lancement, commande shell :

    php index.php action=$action p=$produit do=$phase l=$limite > $repScom/$annee/$produit.log

    # export extraction_TARIF en csv
    # copie les fichiers log et fichier extraction sur le serveur de stockage

    Je ne connais pas le principe, mais l'idée que voulait faire plutôt que :
    mysql -h $servsql -u $usermysql --password=$passmysql --database=$base -e "
    Alter table retar_19_xxx_xx to retar_20_xxx_xx;
    Alter table retar_19_yyy_AA to retar_20_yyy_AA;
    Alter table retar_19_zzz_BB to retar_20_zzz_BB;
    Alter table retar_19_www_xx to retar_20_www_xx;
    ...
    19 plus tard
    exit
    FIN

    Du coup j'ai cherche sur le web la possibilité d'utiliser la concaténation de rename et de mon script ?
    Me conseillez-vous de revoir le principe d'automatisation ?

    Merci des retours
    Maxime

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/01/2013, 12h18
  2. [AC-2003] Renommer des tables et requetes
    Par FCL31 dans le forum Modélisation
    Réponses: 3
    Dernier message: 13/10/2009, 11h42
  3. Renommer des tables de type ODBC attaché
    Par ludal dans le forum Access
    Réponses: 2
    Dernier message: 31/10/2006, 14h42
  4. mise à jour massive des tables entre 2 bases oracle
    Par rihojaniero dans le forum Oracle
    Réponses: 1
    Dernier message: 13/10/2006, 08h22
  5. noms des tables d'une base
    Par molto dans le forum SQL
    Réponses: 2
    Dernier message: 17/03/2003, 22h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo