W języku SQL, aby usunąć wszystkie rekordy z tabeli z możliwością wycofania operacji w ramach transakcji, należy użyć polecenia
Polecenie DELETE FROM jest właściwe, bo służy do usuwania rekordów, czyli wierszy, z tabeli, a nie do kasowania samej tabeli ani zmiany jej struktury. Jeśli zapiszesz np. BEGIN TRANSACTION; DELETE FROM klienci; ROLLBACK;, to w typowej bazie obsługującej transakcje, np. PostgreSQL, MySQL z InnoDB albo SQL Server, usunięcie wierszy można wycofać. To jest właśnie kluczowe w pytaniu: chodzi o usunięcie wszystkich rekordów z możliwością cofnięcia operacji. Brak warunku WHERE oznacza, że operacja dotyczy całej tabeli, więc DELETE FROM nazwa_tabeli; usuwa wszystkie wiersze. W praktyce trzeba z tym uważać, bo jedno pominięte WHERE potrafi zrobić spory bałagan. Moim zdaniem dobra praktyka to najpierw wykonać SELECT z takim samym warunkiem, sprawdzić liczbę rekordów, a dopiero potem uruchomić DELETE w transakcji. Warto też wiedzieć, że DELETE zapisuje zmiany w dzienniku transakcyjnym i działa zgodnie z mechanizmami ACID, więc baza może zapewnić spójność danych. Często myli się to z TRUNCATE, które też czyści tabelę, ale w różnych systemach SQL ma inne zasady transakcyjności i zwykle jest traktowane bardziej jak szybka operacja administracyjna na całej tabeli.
W tym pytaniu najważniejsze jest rozróżnienie między usuwaniem danych a usuwaniem lub modyfikacją struktury bazy. Jeśli ktoś wybiera DROP TABLE, to najpewniej myśli: skoro chcę pozbyć się danych z tabeli, to usunę tabelę. Technicznie jednak DROP TABLE usuwa cały obiekt tabeli razem z jej definicją, kolumnami, indeksami, ograniczeniami i często zależnościami. Po takiej operacji tabela po prostu przestaje istnieć, więc nie jest to zwykłe czyszczenie rekordów. W środowisku produkcyjnym byłoby to bardzo ryzykowne, bo aplikacja oczekująca tej tabeli zaczęłaby zgłaszać błędy. REMOVE brzmi logicznie po angielsku, ale nie jest standardowym poleceniem SQL do usuwania rekordów. To typowy błąd osób, które próbują tłumaczyć polecenia z języka naturalnego zamiast kojarzyć składnię SQL. ALTER TABLE też nie pasuje, ponieważ służy do zmiany schematu tabeli, na przykład dodawania kolumny, zmiany typu danych albo dopisania ograniczenia. Nie usuwa ono wierszy danych. Do kasowania rekordów używa się instrukcji DML, czyli DELETE, najlepiej w transakcji: rozpoczynasz transakcję, wykonujesz DELETE FROM tabela;, potem sprawdzasz efekt i decydujesz COMMIT albo ROLLBACK. Z mojego doświadczenia wynika, że najwięcej pomyłek bierze się z tego, że ktoś nie rozdziela pojęć: dane w tabeli to jedno, a struktura tabeli to drugie. W SQL to rozróżnienie jest bardzo ważne, bo inne komendy działają na rekordach, a inne na schemacie bazy.