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:
Zakres usuwania:
DELETEpozwala na usuwanie wybranych wierszy z tabeli na podstawie warunku określonego w klauzuliWHERE.TRUNCATEnatomiast usuwa wszystkie wiersze z tabeli.Wydajność:
TRUNCATEjest 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.Logowanie transakcji:
DELETEjest operacją logowaną, co oznacza, że każde usunięcie wiersza jest rejestrowane w dzienniku transakcji. W przypadkuTRUNCATE, logowanie jest ograniczone do dealokacji strony danych, a nie do każdego pojedynczego wiersza.Współbieżność:
DELETEmoże wpłynąć na współbieżność, ponieważ blokuje wiersze, które są usuwane.TRUNCATEnie wpływa na współbieżność w taki sam sposób, ponieważ zwalnia całe strony danych, a nie pojedyncze wiersze.Obsługa kluczy obcych:
DELETEpozwala 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.TRUNCATEnie może być używane w przypadku tabel powiązanych za pomocą kluczy obcych, chyba że zostanie użyte polecenieCASCADE.Względem wyzwalaczy:
DELETEmoże aktywować wyzwalacze związane z usuwaniem wierszy, podczas gdyTRUNCATEnie aktywuje wyzwalaczy.Odzyskiwanie:
DELETEpozwala na odzyskanie usuniętych danych za pomocą operacjiROLLBACK, jeśli operacja jest wykonywana w ramach transakcji.TRUNCATEnie pozwala na odzyskiwanie danych za pomocąROLLBACKw 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.