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

Langage SQL Discussion :

Suppression de tables en masse avec préfixe


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 221
    Points : 61
    Points
    61
    Par défaut Suppression de tables en masse avec préfixe
    Bonjour

    J’utilise un site pour faire des tests sur un site joomla.
    Périodiquement je refais une installation standard en cochant la case pour supprimer les tables précédentes.
    Je me suis aperçu que dans cet hébergement les tables ne sont pas supprimées. Je me trouve dans cette base avec plusieurs installations de joomla non supprimés
    Pouvez-vous m'aider (commande sql?) car je n'ai pas trouvé comment supprimer ces dizaines de tables (sans prendre le risque de faire une erreur) avec phpmyadmin
    J'a essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DROP TABLE LIKE "joomTes%"
    mais j'ai le message d'erreur ,
    3 erreurs trouvées lors de l'analyse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Une expression était attendue. (near "LIKE" at position 11)
        Mot clé non reconnu. (near "LIKE" at position 11)
        Jeton inattendu. (near ""joomTes%"" at position 16)
     
    Requête SQL :
     
    DROP TABLE LIKE "joomTes%"
    J'essaie aussi sans succès
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' ) 
        AS statement FROM information_schema.tables 
        WHERE table_schema = 'Dcmsgmx101780fr242_...t' AND table_name LIKE 'joomTes_%'
    Bonne journée

  2. #2
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Janvier 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Janvier 2019
    Messages : 1
    Points : 3
    Points
    3
    Par défaut
    Tchô,
    SQL ne permet pas de supprimer plusieurs tables avec un LIKE comme si dans un DELETE.
    Soit tu les supprimes une à une, soit tu fais une procédure avec un curseur qui sélectionne le nom de chacune des tables (avec un like) et là tu boucles sur un drop table pour chacune des tables.

    ps : à chaque joomla son schéma de base de données pour éviter ça!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 221
    Points : 61
    Points
    61
    Par défaut
    Bonsoir
    pourtant j'avai vu cette piste sur https://stackoverflow.com/questions/...es-with-prefix masi je me demandais effectivement s'il y avait une erreur de ma part.
    Sinon je veux bien une auter piste plus simple ou une procédure car a la base je ne suis pas développeur sql !!
    Merci
    @+

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Dans le lien communiqué, la requête fait ce que proposait toshyjoe : elle parcourt le catalogue pour rechercher les tables dont le nom commence par un certain prefixe (like 'myprefix_%') puis utilise le nom complet de la table ainsi récupérée autant de fois que nécessaire pour faire le DROP.

    Par contre, dans la solution proposée, il manque la boucle pour parcourir les différentes réponses possibles, la requête ne pourra fonctionner que si une seule table correspond au préfixe

    EDIT : j'avais mal lu j'avais cru lire CONCATmais la réponse proposée est spécifique à MySQL car elle utilise GROUP__CONCAT.
    Ca ne va pas puisqu'on ne peut pas faire un DROPde plusieurs tables, or c'est bien potentiellement une liste de tables que GROUP_CONCATva construire.
    Il faut donc bien créer une boucle qui drop les tables une par une

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 561
    Points
    52 561
    Billets dans le blog
    5
    Par défaut
    Certains SGBDR permettent de faire de la suppression en cascade via l'option CASCADE. Pour cela il faut un GBDR qui intègre la notion de schéma SQL (donc adieux MySQmerde…) et faire la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DROP SCHEMA MonSchema WITH CASCADE;
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Ca ne va pas puisqu'on ne peut pas faire un DROPde plusieurs tables,
    Il me semble que MySQL l'autorise...
    Du coup, je pense que la requete est bonne, il manque juste la virgule pour séparer les noms de table :

    donc quelque chose comme (pas testé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name SEPARATOR ',') , ';' ) 
        AS statement FROM information_schema.tables 
        WHERE table_schema = 'Dcmsgmx101780fr242_...t' AND table_name LIKE 'joomTes_%'

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Il me semble que MySQL l'autorise...
    bien vu

    Cf. http://www.mysqltutorial.org/mysql-drop-table

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 221
    Points : 61
    Points
    61
    Par défaut
    Bonjour
    Merci pour votre intérêt
    Déjà je suis avec mySQL avec ce cms; C'est comme ça.
    Ensuite il y a des dizaines de tables, je ne souhaite pas les nommer.
    j'ai essayer plusieurs solutions de Cf. http://www.mysqltutorial.org/mysql-drop-table
    J'ai cru que j'avais oublié %
    dont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     DROP TABLE LIKE '%joomTes%'
     
    MySQL a répondu : Documentation
    #1064 - Erreur de syntaxe près de 'LIKE '%joomTes%'' à la ligne 1
    Si une autre cmd que j'aurai mal interprettée
    @+

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 561
    Points
    52 561
    Billets dans le blog
    5
    Par défaut
    On vous a déjà répondu et donné les bonnes réponses…
    Commencez par lire !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par herveD Voir le message
    j'ai essayer plusieurs solutions de Cf. http://www.mysqltutorial.org/mysql-drop-table
    J'ai cru que j'avais oublié %
    non, ce que vous avez oublié, c'est de lire la phrase écrite juste avant la "solution" à laquelle vous faites référence, à savoir :
    Unfortunately, MySQL does not provide the DROP TABLE LIKE statement that can remove tables based on pattern matching like the following:
    DROP TABLE LIKE '%pattern%'
    Concernant la deuxième solution que vous proposez :
    - contrairement à ce que je disais plus haut, il ne manque pas la virgule, puisque d'après la documentation de GROUP_CONCAT, il y a une virgule par défaut comme séparateur.
    - elle devrait donc fonctionner, mais elle ne fait que générer l'ordre DROP TABLE... il faut donc ensuite exécuter le résultat de cette requête.

Discussions similaires

  1. [phpMyAdmin] suppression de tables en masse avec prefix ASUP
    Par herveD dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 14/01/2019, 15h47
  2. [MySQL] Sauvegarde et restauration de tables mysql avec préfix
    Par BorisINCS dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/03/2016, 14h10
  3. Suppression du table space avec datafile
    Par magboom dans le forum Oracle
    Réponses: 5
    Dernier message: 16/08/2007, 10h01
  4. [CR .NET] Table croisée: compléter avec lignes vides
    Par kartben dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 29/06/2004, 10h38
  5. Gestion de table dynamique access avec delphi 7
    Par bob.marley dans le forum Bases de données
    Réponses: 7
    Dernier message: 22/04/2004, 13h12

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