Wskaż różnicę pomiędzy poleceniami DROP TABLE i TRUNCATE TABLE.
DROP usuwa tabelę ze strukturą, a TRUNCATE tylko wszystkie wiersze.TRUNCATE tabela istnieje dalej, a dane przywraca się tylko z kopii zapasowej.TRUNCATE nie przyjmuje warunku; zmianę wybranych danych robi UPDATE.DROP TABLE usuwa też strukturę, a w MySQL żadnego z poleceń nie cofa ROLLBACK.Pytanie z egzaminu CKE, czerwiec 2020 (arkusz EE.09-SG-20.06).
DROP TABLE usuwa całą tabelę: jej dane i strukturę, czyli definicję kolumn, indeksy i klucze. Po nim tabela przestaje istnieć i odwołanie do niej kończy się błędem. TRUNCATE TABLE usuwa wszystkie wiersze, ale zostawia pustą tabelę z niezmienioną strukturą, gotową na nowe dane.
W MySQL TRUNCATE TABLE dodatkowo zeruje licznik AUTO_INCREMENT, więc nowe rekordy znów dostaną numery od 1. Różni się tym od DELETE FROM tabela;, które też kasuje wszystkie wiersze, ale robi to wiersz po wierszu i licznika nie zeruje. Do zapamiętania: DROP - nie ma tabeli, TRUNCATE - jest pusta tabela.
Kluczem jest odróżnienie usunięcia tabeli od jej opróżnienia. Opis, w którym TRUNCATE TABLE zmienia dane spełniające warunek, pasuje do UPDATE z klauzulą WHERE. TRUNCATE nie przyjmuje żadnego warunku i zawsze usuwa wszystkie wiersze.
Twierdzenie, że oba polecenia usuwają tylko zawartość, jest błędne w połowie: DROP TABLE kasuje także strukturę. Ponadto w MySQL żadnego z nich nie cofa się poleceniem ROLLBACK, bo oba należą do poleceń DDL, które same zatwierdzają transakcję.
Z tego samego powodu odpada opis, w którym oba polecenia usuwają tabelę, a cofnąć da się TRUNCATE TABLE. Po TRUNCATE tabela nadal istnieje, tylko jest pusta, a przywrócenie danych wymaga kopii zapasowej. Prawidłowa różnica: DROP TABLE usuwa tabelę, a TRUNCATE TABLE usuwa wszystkie dane, pozostawiając pustą tabelę.
Dlatego przed każdym z tych poleceń robi się kopię bazy.