Poprawne polecenie do usunięcia całej tabeli w SQL to „DROP TABLE”. To polecenie działa na poziomie struktury bazy danych, a nie tylko na danych. Innymi słowy: nie usuwasz rekordów z tabeli, tylko samą tabelę jako obiekt – razem z jej definicją, indeksami, constraintami (klucze obce, klucze główne, unikalne, check) itp. Przykładowo, jeśli masz tabelę użytkownicy, to jej usunięcie wygląda tak: DROP TABLE uzytkownicy; Po wykonaniu tej komendy tabela przestaje istnieć w schemacie bazy. Próba SELECT * FROM uzytkownicy po takim DROP-ie zakończy się błędem typu „table does not exist”. Moim zdaniem warto zapamiętać, że DROP to operacja DDL (Data Definition Language), czyli zmienia definicję bazy, w odróżnieniu od DELETE, który jest DML (Data Manipulation Language) i modyfikuje tylko zawartość. W praktyce w projektach produkcyjnych polecenia DROP TABLE stosuje się ostrożnie, zwykle po wykonaniu kopii zapasowej lub na środowiskach deweloperskich/testowych, bo operacja jest destrukcyjna i w wielu silnikach baz danych nieodwracalna bez backupu. Dobrą praktyką jest też sprawdzenie zależności, np. kluczy obcych z innych tabel, bo DROP TABLE może się nie udać, jeśli inne tabele się do niej odwołują. W wielu systemach stosuje się wariant: DROP TABLE IF EXISTS nazwa_tabeli; co pozwala uniknąć błędu, gdy tabela już została wcześniej usunięta. Warto też mieć świadomość, że w normalnych projektach zmiany struktury bazy (w tym DROP TABLE) wykonuje się przez migracje lub skrypty wersjonujące, a nie „z palca” na produkcji, co po prostu zwiększa bezpieczeństwo i porządek w bazie.
W SQL bardzo łatwo pomylić operacje na danych z operacjami na strukturze bazy, i stąd często biorą się błędne skojarzenia przy tego typu pytaniach. Komenda DELETE służy do usuwania wierszy z już istniejącej tabeli, a nie do likwidowania samej tabeli. Kiedy piszesz DELETE FROM produkty; usuwasz zawartość tabeli produkty, ale tabela nadal istnieje, ma te same kolumny, indeksy i można do niej wstawiać nowe rekordy. To typowa operacja DML, czyli manipulacja danymi, a nie definicją schematu. Zdarza się, że ktoś myśli: „skoro usuwam wszystkie rekordy, to jakby usuwam tabelę”, ale technicznie to zupełnie co innego – struktura dalej zostaje. Odpowiedź UNIQUE też wygląda pozornie znajomo, bo kojarzy się z constraintem UNIQUE i słowem kluczowym w definicji kolumn albo indeksów. Jednak UNIQUE nie jest poleceniem do wykonywania operacji na tabelach, tylko elementem definicji, który wymusza niepowtarzalność wartości w danej kolumnie lub zestawie kolumn. Używa się go np. w CREATE TABLE albo CREATE INDEX, ale samodzielnie nie posłuży do usunięcia tabeli. TRUNCATE TABLE jest ciekawszym przypadkiem, bo faktycznie „czyści” tabelę. Jednak ta komenda usuwa tylko wszystkie wiersze, pozostawiając samą tabelę i jej strukturę. Jest to operacja z pogranicza DDL/DML, bardzo szybka i często wykorzystywana do resetowania danych pomocniczych, ale nadal nie likwiduje obiektu tabeli w schemacie bazy. Po TRUNCATE TABLE nazwa_tabeli; dalej można wykonywać INSERT i SELECT na tej tabeli. Typowym błędem myślowym jest wrzucenie do jednego worka: DELETE, TRUNCATE i DROP, jako „polecenia do usuwania”. W praktyce każde z nich usuwa coś innego: DELETE – rekordy według warunku, TRUNCATE – całą zawartość tabeli, DROP – definicję tabeli jako obiektu. Z punktu widzenia projektowania i administracji baz danych to bardzo ważne rozróżnienie, bo ma wpływ na bezpieczeństwo danych, możliwość cofnięcia zmian i zachowanie powiązań między tabelami.