Fix: Alle Tabellen mit Präfix XXX löschen

Hi,

gibt es einen mysql-befehl, mit dem ich auf einen Rutsch alle Tabellen einer Datenbank löschen kann, die ein bestimmtes Tabellenpräfix (z.b. xxx) haben?

Gruß, Fix

  1. Hi,

    gibt es einen mysql-befehl, mit dem ich auf einen Rutsch alle Tabellen einer Datenbank löschen kann, die ein bestimmtes Tabellenpräfix (z.b. xxx) haben?

    Im Sinne von Wildcards im Tabellennamen?
    Nein.

    Erst die vorhandenen Tabellen auslesen (SHOW-irgendwas-Syntax), und daraus ein entsprechendes Statements zu generieren, ist aber möglich.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Erst die vorhandenen Tabellen auslesen (SHOW-irgendwas-Syntax), und daraus ein entsprechendes Statements zu generieren, ist aber möglich.

      Hi,

      SHOW TABLES LIKE 'xxx_%'

      listet mir alle Tabellen mit dem Präfix xxx_ auf.

      Wer weiß weiter, wie ich diese dann löschen kann?

      Gruß, Fix

      1. Hi,

        SHOW TABLES LIKE 'xxx_%'

        listet mir alle Tabellen mit dem Präfix xxx_ auf.

        Wer weiß weiter, wie ich diese dann löschen kann?

        Mit einem DROP-Statement ...?

        Noch mal: *Generiere* dir eins, mit den Informationen aus obiger Abfrage.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Noch mal: *Generiere* dir eins, mit den Informationen aus obiger Abfrage.

          Weiß nicht, wie geht.

          Und besonders nicht, wie ich die beiden Statements verbinde. Mit "where" habe ich bereits alles versucht. Nichts wollte. Ich habe etwas voln einem ||-Operator gelesen, den kenne ich aber nicht.

          Daher frage ich ja hier an. Alles, was Du mir bisher erzählt hast, hatte ich schon woanders gelesen. Demnach wäre das Forum bis hierhin gar nicht nötig gewesen :-P

          Gruß, Fix

          1. Hi,

            Noch mal: *Generiere* dir eins, mit den Informationen aus obiger Abfrage.

            Weiß nicht, wie geht.

            Bspw. mit einem Script, dass die Ergebnisse der ersten Abfrage auswertet, und daraus die zweite zusammensetzt.

            Und besonders nicht, wie ich die beiden Statements verbinde.

            Nicht in SQL selber - SQL ist nicht zum dynamischen Generieren von Statements gedacht.

            Daher frage ich ja hier an. Alles, was Du mir bisher erzählt hast, hatte ich schon woanders gelesen.

            Dann merkst du wohl langsam, wie dümmlich es war, von all dem, was du „schon woanders gelesen“ hattest, kein Wörtchen zu erwähnen.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Hi,

              insofern das Datenbanksystem sich nach ANSI '92 Standards richtet und damit auch die INFORMATION_SCHEMA Views unterstützt, kann man wunderbar dynamisches SQL generieren ...

              SELECT 'DROP TABLE ' + TABLE_NAME + ';'
                FROM INFORMATION_SCHEMA.TABLES
                WHERE TABLE_NAME LIKE 'xxx%'

              Das Resultat aus einer Grid/Text-Anzeige (je nach verwendetem Tool) sollte man dann im Guttenbergschen Stil wiederverwenden können.

              Ich benutze solcherlei Konstrukte eher häufig für Wartungsscripts zum Rebuild von Indizes.

              Ciao, Frank

            2. Hi!

              SQL ist nicht zum dynamischen Generieren von Statements gedacht.

              In MySQL kann man einzelne Statements in Strings mit PREPARE und EXECUTE ausführen. Für mehrere Tabellenlöschungen müsste man sich aber eine Stored Procedure drumherumschreiben, die das Ergebnis aus Franks SELECT-Statement per Cursor durchläuft und dann einzeln DROPt.

              Das ist aber eine Menge Aufwand und lohnt sich nur aus akademischen Gründen oder wenn man sowas öfter machen muss. Dann stellt sich allerdings die Frage, warum das öfter gemacht werden soll. Für den Produktivbetrieb gibt es möglicherweise bessere Lösungen für die eigentliche zu lösende Aufgabenstellung. Wenn man grad entwickelt und aus Testgründen immer wieder löschen muss, wäre zu klären, ob man da nicht gleich eine ganze dedizierte Datenbank löschen kann statt irgendwo einzeln Tabellen rauszufischen.

              Lo!

          2. Hallo,

            Noch mal: *Generiere* dir eins, mit den Informationen aus obiger Abfrage.
            Weiß nicht, wie geht.

            mit der Programmiersprache Deiner Wahl. Nicht mit SQL.

            Und besonders nicht, wie ich die beiden Statements verbinde.

            Nicht mit SQL. Mit der Programmiersprache Deiner Wahl.

            Mit "where" habe ich bereits alles versucht. Nichts wollte. Ich habe etwas voln einem ||-Operator gelesen, den kenne ich aber nicht.

            Geht in MySQL derzeit auch nicht, siehe Handbuchabschnitt zu DROP TABLE.

            Daher frage ich ja hier an. Alles, was Du mir bisher erzählt hast, hatte ich schon woanders gelesen. Demnach wäre das Forum bis hierhin gar nicht nötig gewesen :-P

            wenn Du das vorher bereits geschrieben hättest, ...

            Verwunderte Grüße

            Vinzenz