[MySQL] Jak usunąć wszystkie tabele z bazy ?

Bazy danych
[MySQL] Jak usunąć wszystkie tabele z bazy ?

Do tematu możemy podejść na kilka sposobów, najprostszym zapewne jest usunięcie bazy danych i stworzenie jej na nowo co da pożądany efekt. Jednak nie zawsze mamy uprawnienia do usunięcia bazy danych, poniższe rozwiązania pokażą jak to wykonać bez tej operacji.

Rozwiązanie 1

To rozwiązanie polega na wygenerowaniu zapytań usuwających tabele w bazie danych, a następnie tab wygenerowaną listę zapytań wklejamy do konsoli lub jakiejś aplikacji zarządzającej bazą danych np. phpMyAdmin.

SELECT concat('DROP TABLE IF EXISTS `', table_name, '`;')
FROM `information_schema`.`tables`
WHERE `table_schema` = 'nazwa_bazy';

Powyższe polecenie pobiera listę tabel z „information_schema” dla bazy danych o nazwie „nazwa_bazy”, a następnie wykorzystując funkcję „concat” tworzy polecenie usuwające tabelę.

Działanie powyższego zapytania powinno zwrócić listę zapytań podobną do poniższej oczywiście z innymi nazwami tabel,

DROP TABLE IF EXISTS `tabela1`;
DROP TABLE IF EXISTS `tabela2`;
DROP TABLE IF EXISTS `tabela3`;

Tak wygenerowane zapytania możemy wkleić do konsoli czy też programu zarządzającego bazami danych i wykonać. Należy jednak pamiętać że w przypadku gdy są zdefiniowane relacje pomiędzy tabelami należy przed uruchomieniem zapytań wyłączyć sprawdzanie kluczy obcych, które to mogło by zablokować usunięcie części tabel. Sprawdzanie kluczy obcych wyłączamy poniższym zapytaniem.

SET FOREIGN_KEY_CHECKS=0;

Rozwiązanie 2

W przypadku gdy mamy dostęp do serwera z poziomu konsoli sprawa jest prostsza i sprowadza się do wykonania poniższego polecenia.

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | 
grep ^DROP | 
mysql -u[USERNAME] -p[PASSWORD] [DATABASE]