Zalecane, 2019

Wybór Redakcji

Różnica między DELETE a TRUNCATE w SQL

DELETE i TRUNCATE to komendy używane do usuwania krotek z relacji, ale różnią się w wielu kontekstach. W SQL polecenie DELETE jest poleceniem języka manipulowania danymi, natomiast polecenie TRUNCATE jest językiem definicji danych . Jednak punktem, który pozwala nam odróżnić DELETE od TRUNCATE jest to, że DELETE jest w stanie usunąć określone krotki z relacji, podczas gdy komenda TRUNCATE usuwa całe krotki z relacji.

nie powinniśmy na tym poprzestać, istnieje wiele innych różnic między DELETE i TRUNCATE. Omówmy je za pomocą poniższego wykresu porównawczego.

Wykres porównania

Podstawa do porównaniaKASOWAĆŚCIĘTY
PodstawowyMożesz określić krotkę, którą chcesz usunąć.Usuwa wszystkie krotki z relacji.
JęzykDELETE to polecenie języka manipulacji danymi.TRUNCATE jest językiem definicji danych.
GDZIEPolecenie DELETE może mieć klauzulę WHERE.Polecenie TRUNCATE nie ma klauzuli WHERE.
SpustPolecenie DELETE aktywuje wyzwalacz zastosowany w tabeli i powoduje ich uruchomienie.Polecenie TRUNCATE nie aktywuje wyzwalaczy do uruchomienia.
UsunięciePolecenie DELETE eliminuje krotki jeden po drugim.TRUNCATE usuwa całą stronę danych zawierającą krotki.
ZamekPolecenie DELETE blokuje wiersz / krotkę przed usunięciem.TRUNCATE strona danych blokady poleceń przed usunięciem danych tabeli.
PrędkośćPolecenie DELETE działa wolniej w porównaniu do TRUNCATE.TRUNCATE jest szybszy w porównaniu do DELETE.
TransakcjaUSUŃ dziennik transakcji dla każdej skasowanej krotki.TRUNCATE rejestr transakcji dla każdej usuniętej strony danych.
PrzywracaćPolecenie DELETE może być śledzone przez COMMIT lub ROLLBACK.Polecenie TRUNCATE nie może być ROLLBACK.

Definicja DELETE

DELETE to polecenie języka DML ( Data Manipulation Language ). Zadaniem polecenia DELETE jest usunięcie lub usunięcie krotek z tabeli lub relacji. Używając DELETE, jesteśmy w stanie wyeliminować całą krotkę, ze wszystkimi jej wartościami atrybutów z relacji. DELETE nie usuwa wartości określonego atrybutu, krotki z relacji.

Możesz filtrować krotki, które chcesz usunąć z tabeli, używając klauzuli WHERE . Jeśli podasz klauzulę WHERE w instrukcji DELETE, usuniesz tylko krotki spełniające warunek klauzuli WHERE. Ale jeśli nie określisz klauzuli WHERE w instrukcji DELETE, to domyślnie usunie lub wyeliminuje wszystkie krotki z relacji. WHERE klauzula w instrukcji DELETE może zawierać zagnieżdżone instrukcje SELECT-FROM-WHERE .

Składnia polecenia DELETE jest następująca:

DELETE FROM table_name WHERE [ conditon ];

Polecenie DELETE działa tylko na pojedynczej relacji lub tabeli naraz. W przypadku, gdy chcesz usunąć krotkę z różnych relacji, musisz umieścić inne polecenie DELETE dla każdego z nich. Jednak usunięcie krotki z jednej relacji może naruszyć referencyjną integralność bazy danych, którą można rozwiązać za pomocą wyzwalaczy. Jeśli polecenie DELETE narusza integralność referencyjną, aktywowane są wszystkie wyzwalacze referencyjne (jeśli zostały określone), które propagują akcję usuwania krotek o różnej relacji, która odnosi się do usuniętych krotek.

Polecenie DELETE najpierw blokuje wiersz lub krotkę do usunięcia, a następnie usuwa krotkę jeden po drugim . Dlatego wymaga więcej blokad i zasobów, które spowalniają . Zmiany można wykonać za pomocą instrukcji DELETE na stałe za pomocą polecenia COMMIT lub można zresetować bazę danych za pomocą ROLLBACK .

Definicja TRUNCATE

TRUNCATE jest podobne do polecenia DELETE, ponieważ usuwa także krotki z relacji. Różnica polega na tym, że usuwa całe krotki z relacji. Gdy wykonywane jest polecenie TRUNCATE, całe dane z tabeli są usuwane, każda krotka wraz z wszystkimi jej wartościami atrybutów zostaje wyeliminowana z tabeli. Ale struktura tabeli nadal istnieje w bazie danych. Możesz ponownie wpisać krotki w tabeli. TRUNCATE jest językiem definicji danych.

Składnia komendy TRUNCATE jest następująca:

TRUNCATE TABLE table_name ;

Podobnie jak DELETE, TRUNCATE nie działa na danych tabeli wiersz po rzędzie. Zamiast tego działa na stronach danych, które przechowują dane tabeli. Teraz, gdy TRUNCATE usuwa strony danych, musi pozyskać blokadę stron danych zamiast krotek. W związku z tym powoduje mniejsze zapotrzebowanie na blokady i zasoby, które powodują, że TRUNCATE jest szybszy w porównaniu do DELETE.

Wykonanie polecenia TRUNCATE nie aktywuje żadnych wyzwalaczy, ponieważ nie obsługuje danych wiersz po rzędzie. TRUNCATE nie może zostać wykonane, jeśli do tabeli odwołuje się dowolny klucz obcy . Gdy polecenie TRUNCATE kasuje dane tabeli, nigdy nie można go odzyskać .

Kluczowe różnice między DELETE i TRUNCATE w SQL

  1. Główną różnicą między DELETE i TRUNCATE jest to, że używając DELETE możesz usunąć określoną krotkę z relacji. Ale użycie TRUNCATE spowoduje usunięcie całych krotek z relacji.
  2. DELETE to polecenie DML, natomiast TRUNCATE to polecenie DDL.
  3. DELETE używa klauzuli WHERE do filtrowania rekordów / krotek, które mają zostać usunięte. Jednak TRUNCATE nie wymaga klauzuli WHERE, ponieważ usuwa wszystkie krotki, więc nie ma potrzeby filtrowania krotek.
  4. DELETE aktywuje wyzwalacze referencyjne zastosowane do tabel. Ale TRUNCATE nie uruchamia żadnych wyzwalaczy na stole.
  5. Polecenie DELETE eliminuje krotki jeden po drugim ze stołu, w kolejności, są one przetwarzane. Jednak TRUNCATE nie działa na krotkach jeden po drugim. Zamiast tego TRUNCATE działa na stronie danych, która przechowuje dane tabeli.
  6. DELETE pobiera blokadę krotki przed usunięciem, podczas gdy TRUNCATE pobiera blokadę na stronie danych przed usunięciem strony danych.
  7. TRUNCATE jest szybszy w porównaniu do polecenia DELETE.
  8. USUŃ dziennik transakcji rekordów dla każdej krotki, podczas gdy rejestr transakcji TRUNCATE dla każdej strony danych.
  9. Po usunięciu danych za pomocą TRUNCATE, nigdy nie można odzyskać z powrotem, natomiast można odzyskać dane, które zostały usunięte za pomocą polecenia DELETE.

Wniosek:

Jeśli chcesz dostosować usuwanie rekordów z tabeli, możesz użyć polecenia DELETE. Jeśli chcesz opróżnić tabelę, tzn. Nie chcesz pozostawić żadnych danych w tabeli, użyj polecenia TRUNCATE.

Top