DELETE FROM i TRUNCATE TABLE – jakie są różnice – Kurs SQL
W poprzednich wpisach omówiłem polecenia DELETE oraz TRUNCATE. Teraz poznamy najistotniejsze różnice występujące między nimi.
DELETE
- jest częścią
Data Manipulation Language
- możliwość stosowania klauzuli
WHERE
, możliwość wybrania rekordów do usunięcia - nie zmienia wartości licznika (
AUTO_INCREMENT
), nawet w przypadku zerowania wszystkich rekordów ROLLBACK
– możliwość cofnięcia operacjiDELETE
, przywrócenie stanu tabeli sprzed usunięcia rekordówDELETE
uruchamiatrigery
, bierze pod uwagę więzy integralności- usuwając rekordy wpierw kolejno wpadają one do
cache
, a następnie do logu transakcyjnego (kopia rekordu) - operacja
DELETE
nie zwalnia miejsca po usunięciu danych, mimo że tabela wydaje się pusta, jej wielkość (zajmowane miejsce) pozostaje niezmieniona
TRUNCATE
- jest częścią
Data Definition Language
- brak możliwości stosowania klauzuli
WHERE
, zawsze usuwane są wszystkie rekordy - zeruje wartość licznika na tabeli (pola typu
AUTO_INCREMENT
) ROLLBACK
– nie na wszystkich silnikach bazodanowych można cofnąć operacjęTRUNCATE
TRUNCATE
nie uruchamiatrigerów
, nie bierze pod uwagę więzów integralności, operacja nie zostanie wykonana jeżeli na tabeli istnieją klucze obce- usuwając rekordy do logu transakcyjnego zapisuje się tylko sama operacja
TRUNCATE
, bez danych - operacja
TRUNCATE
zwalnia miejsce po usunięciu danych
Znasz jeszcze inne znaczące różnice o których zapomniałem napisać? Daj znać w komentarzu!