Różnica między DELETE a TRUNCATE

DELETE i TRUNCATE to dwa różne polecenia w języku SQL, które służą do usuwania danych z tabeli, ale różnią się pod względem zachowania i wydajności.

Oto główne różnice między DELETE a TRUNCATE:

  1. Zakres usuwania: DELETE pozwala na usuwanie wybranych wierszy z tabeli na podstawie warunku określonego w klauzuli WHERE. TRUNCATE natomiast usuwa wszystkie wiersze z tabeli.

  2. Wydajność: TRUNCATE jest zazwyczaj szybsze niż DELETE, ponieważ nie zapisuje danych o usuniętych wierszach w dzienniku transakcji, co pozwala na oszczędność czasu i zasobów systemowych.

  3. Logowanie transakcji: DELETE jest operacją logowaną, co oznacza, że każde usunięcie wiersza jest rejestrowane w dzienniku transakcji. W przypadku TRUNCATE, logowanie jest ograniczone do dealokacji strony danych, a nie do każdego pojedynczego wiersza.

  4. Współbieżność: DELETE może wpłynąć na współbieżność, ponieważ blokuje wiersze, które są usuwane. TRUNCATE nie wpływa na współbieżność w taki sam sposób, ponieważ zwalnia całe strony danych, a nie pojedyncze wiersze.

  5. Obsługa kluczy obcych: DELETE pozwala na usuwanie wierszy z tabeli, która jest powiązana z inną tabelą za pomocą klucza obcego, o ile usuwane wiersze nie naruszają integralności referencyjnej. TRUNCATE nie może być używane w przypadku tabel powiązanych za pomocą kluczy obcych, chyba że zostanie użyte polecenie CASCADE.

  6. Względem wyzwalaczy: DELETE może aktywować wyzwalacze związane z usuwaniem wierszy, podczas gdy TRUNCATE nie aktywuje wyzwalaczy.

  7. Odzyskiwanie: DELETE pozwala na odzyskanie usuniętych danych za pomocą operacji ROLLBACK, jeśli operacja jest wykonywana w ramach transakcji. TRUNCATE nie pozwala na odzyskiwanie danych za pomocą ROLLBACK w większości systemów zarządzania bazami danych.

Podsumowując, DELETE i TRUNCATE mają różne zastosowania i skutki uboczne. Wybór między nimi zależy od wymagań konkretnej sytuacji.