2016-08-23 8 views
2

Ist es möglich, Tabellen mit 10 Datensätzen in einer einzigen Anweisung mit einer solchen Anweisung zu löschen?Löschen Sie Tabellen mit genau 10 Zeilen in MySQL

.. DROP TABLE ... WHERE name IN 
(SELECT table_name FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'my_db' AND table_rows = 10); 
+0

Nein nein nein nein nein – RiggsFolly

+0

Sie müssen dynamisches SQL in einer gespeicherten Prozedur schreiben. – Barmar

Antwort

2

Vor allem kein Vertrauen in den table_rows in INFORMATION_SCHEMA.TABLES. Es ist ein Schätzung, es ist nicht präzise. Wie könnte es präzise sein, wenn man bedenkt, dass zu einem gegebenen Zeitpunkt Transaktionen nicht festgeschrieben sind, die Zeilen einfügen oder löschen? Die Anzahl der Zeilen in der Tabelle kann diese Änderungen enthalten oder nicht.

Zweitens unterstützt die DROP TABLE-Anweisung nur eine feste Liste von zu löschenden Tabellen. Hier ist die Syntax Referenz von http://dev.mysql.com/doc/refman/5.7/en/drop-table.html:

DROP [TEMPORARY] TABLE [IF EXISTS] 
    tbl_name [, tbl_name] ... 
    [RESTRICT | CASCADE] 

Diese Aussage keine WHERE Klausel oder Bedingungen nicht unterstützt. Sie müssen die Tabellen explizit benennen.

Sie sollten die Angewohnheit zum Lesen der Dokumentation entwickeln, um herauszufinden, welche Syntax unterstützt wird. Dies ist die größte Beschwerde, die ich über Fragen zu Stack Overflow habe: zu viele Leute überspringen das Lesen der Referenzdokumentation. 90% oder mehr der Fragen hier wären unnötig, wenn sie es taten.

Wie oben bei @Barmar können Sie prepare a dynamic SQL statement mit der Liste der Tabellen, die Sie löschen möchten.

Drittens ist das Löschen eines unbestimmten Satzes von Tabellen sehr gefährlich. Sie könnten die falschen Tabellen aufgrund eines Fehlers in Ihrem Code löschen, der die Tabellen findet, die den Kriterien entsprechen. Dies führt zu einem Datenverlust, von dem Sie nicht wiederherstellen können. Ich "automatisiere" nie das Ablegen von Tabellen.

Verwandte Themen