Chcę upuścić wszystkie bazy danych z zerowymi tabelami, które mogłem uzyskać bazy danych za pomocą tabel SELECT table_schema, count(table_name) FROM information_schema.tables group by table_schema Ale jak mogę usunąć DBS nie na tej liście. Nie mogę tego zrobić ręcznie, ponieważ jest tam więcej niż 500 DBS.

1
Abdullah Saleem 16 luty 2017, 14:13

2 odpowiedzi

Najlepsza odpowiedź

Użyto metody opublikowanej przez @Dnoeth w komentarzach z lekko różnym zapytaniem, aby uzyskać polecenia Drop

SELECT  concat('drop database ',schema_name) FROM information_schema.schemata 
WHERE schema_name NOT IN
(SELECT TABLE_SCHEMA FROM information_schema.tables)
0
Abdullah Saleem 27 marzec 2017, 08:10

Aby poznać schematy bez tabel, możesz spróbować tego:

SELECT * FROM information_schema.schemata S
WHERE NOT EXISTS
    (SELECT 'TABLE' from information_schema.tables T
     WHERE T.table_schema = S.schema_name)

Ponieważ w tabeli systemowej SCHEMATA znajdziesz wszystkie schematy serwera i tabeli TABLES znajdziesz wszystkie stoliki we wszystkich schematy

Górne zapytanie muszą być wprowadzane na kursorze, więc musisz użyć przygotowanego oświadczenia, aby wykonać kursor, ponieważ twój DROP DATABASE ma zmienną (Twój schema_table) i może być prowadzony tylko z przygotowanym oświadczeniem

2
Joe Taras 16 luty 2017, 12:05