Jak usunąć wszystkie tabele w MySQL

Miałem dzisiaj potrzebę usunięcia wszystkich tabel w MySQL. Serwer produkcyjny nie posiada phpMyAdmin, który jest moim ulubionym narzędziem w moim środowisku deweloperskim do zarządzania bazami danych MySQL. Więc utknąłem z konsolą MySQL, i potrzebowałem łatwego sposobu na wykonanie tego zadania.

Jak zawsze mówię „Google it”.

Znalazłem elegancki skrypt na SOW. W tym artykule opiszę co on robi linia po linii.

Ten kod usuwa wszystkie tabele w aktualnie wybranej bazie danych
SET FOREIGN_KEY_CHECKS = 0;

Ta linia wyłącza ograniczenia klucza obcego. Jeśli dwie tabele są powiązane ze sobą, to nie możesz usunąć żadnej z nich. Ograniczenie klucza obcego nie pozwala na to.

SET GROUP_CONCAT_MAX_LEN=32768;

Ta linia określa maksymalną długość funkcji CONCAT. W kolejnych liniach skryptu zobaczysz konkatenację. W niektórych konfiguracjach MySQL wartość ta może być zbyt niska. Dlatego aby uniknąć ewentualnych błędów, ustawiamy ją odpowiednio dużą.

SET @tables = NULL;

To jest zmienna, w której przechowujemy nazwy tabel.

SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables FROM information_schema.tables WHERE table_schema = (SELECT DATABASE());

Pamiętaj, że wszystkie twoje schematy mysql są przechowywane w bazie information_schema. Funkcja SELECT DATABASE() jest używana do określenia aktualnie używanej bazy danych. Ta linia wybiera listę tabel w aktualnej bazie danych, i dekoruje je znakiem (`), a wynik końcowy będzie przechowywany w zmiennej tables jak poniżej, `table_1`, `table_2`, …, `table_n`.

SELECT IFNULL(@tables,'dummy') INTO @tables;

Ta linia wstawia „dummy” do zmiennej tables jeśli zmienna jest NULL. Ta linia zapewnia, że zmienna tables nigdy nie jest NULL.

SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);

Ta linia dodaje „DROP TABLE IF EXISTS” przed twoją zmienną tables. Tak więc wynikiem końcowym będzie DROP TABLE IF EXISTS `table_1`, `table_2`, …, `table_n`.

PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Nie ma potrzeby oddzielania tych trzech linii. Te linie wykonują zdanie SQL w zmiennej tables.

SET FOREIGN_KEY_CHECKS = 1;

Na koniec ta linia włącza opcję sprawdzania ograniczeń klucza obcego.

Naprawdę spodobał mi się ten mały skrypt. Jest naprawdę poręczny. Mam nadzieję, że pomoże Ci lepiej zrozumieć, jak to działa.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.