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 operacji DELETE, przywrócenie stanu tabeli sprzed usunięcia rekordów
  • DELETE uruchamia trigery, 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 uruchamia trigeró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!