Jaka jest różnica między SQL TRUNCATE
a DELETE
SQL?
Jeśli twoja odpowiedź dotyczy konkretnej platformy, proszę to zaznaczyć.
Jaka jest różnica między SQL TRUNCATE
a DELETE
SQL?
Jeśli twoja odpowiedź dotyczy konkretnej platformy, proszę to zaznaczyć.
Odpowiedzi:
Oto lista różnic. Podkreśliłem funkcje specyficzne dla Oracle i mam nadzieję, że społeczność może dodać specyficzną różnicę innych dostawców. Różnice, które są wspólne dla większości dostawców, mogą spaść bezpośrednio pod nagłówki, a różnice zaznaczono poniżej.
Jeśli chcesz szybko usunąć wszystkie wiersze z tabeli i naprawdę jesteś pewien, że chcesz to zrobić, i nie masz obcych kluczy do tabel, to TRUNCATE prawdopodobnie będzie szybsze niż DELETE .
Należy wziąć pod uwagę różne problemy specyficzne dla systemu, jak wyszczególniono poniżej.
Usuń to DML, obcięcie to DDL ( co to jest DDL i DML? )
Zmienna według dostawcy
Serwer SQL *
Obcinanie można wycofać.
PostgreSQL
Obcinanie można wycofać.
Wyrocznia
Ponieważ TRUNCATE jest DDL, wymaga dwóch zatwierdzeń, jednego przed wykonaniem instrukcji i jednego po nim. Obcięcia nie można zatem wycofać, a błąd w procesie obcinania i tak wyda zatwierdzenie.
Zobacz jednak Flashback poniżej.
Usuń nie odzyskuje miejsca, Truncate odzyskuje miejsce
Wyrocznia
Jeśli użyjesz klauzuli REUSE STORAGE, segmenty danych nie zostaną anulowane, co może być nieznacznie bardziej wydajne, jeśli tabela zostanie ponownie załadowana danymi. Znak wysokiej wody został zresetowany.
Usuń można użyć do usunięcia wszystkich wierszy lub tylko podzbioru wierszy. Obetnij usuwa wszystkie wiersze.
Wyrocznia
Gdy tabela jest podzielona na partycje, poszczególne partycje mogą zostać obcięte osobno, dzięki czemu możliwe jest częściowe usunięcie wszystkich danych tabeli.
Usuń można zastosować do tabel i tabel wewnątrz klastra. Obcięcie dotyczy tylko tabel lub całego klastra. (Może być specyficzny dla Oracle)
Wyrocznia
Usunięcie nie wpływa na identyfikator obiektu danych, ale obcięcie przypisuje nowy identyfikator obiektu danych, chyba że od czasu jego utworzenia nigdy nie istniała wstawka do tabeli. Nawet pojedyncza wycofana wstawka spowoduje przypisanie nowego identyfikatora obiektu danych po obcięciu .
Retrospekcja działa w przypadku usuwania, ale obcięcie zapobiega retrospekcji do stanów sprzed operacji.
Jednak od 11gR2 funkcja ARCHIWUM FLASHBACK pozwala na to, z wyjątkiem wersji Express Edition
Wykorzystanie FLASHBACK w Oracle http://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_flashback.htm#ADFNS638
Zmienna
Wyrocznia
Usunięcie może zostać przyznane w tabeli innemu użytkownikowi lub roli, ale obcinanie nie może odbywać się bez użycia uprawnienia DROP ANY TABLE.
Usuń powoduje wygenerowanie niewielkiej liczby powtórzeń i dużej liczby cofnięć. Obcięcie generuje znikomą liczbę każdego z nich.
Wyrocznia
Operacja obcięcia sprawia, że indeksy bezużyteczne są ponownie użyteczne. Usuń nie.
Obcięcia nie można zastosować, gdy włączony klucz obcy odwołuje się do tabeli. Leczenie za pomocą delete zależy od konfiguracji kluczy obcych.
Wyrocznia
Obcięcie wymaga wyłącznej blokady tabeli, usuwanie wymaga udostępnionej blokady tabeli. Dlatego wyłączenie blokad stołu jest sposobem na zapobieganie obcinaniu operacji na stole.
Wyzwalacze DML nie uruchamiają się po obcięciu.
Wyrocznia
Dostępne są wyzwalacze DDL.
Wyrocznia
Obcięcia nie można wydać przez łącze do bazy danych.
Serwer SQL *
Obcięcie resetuje sekwencję dla typów kolumn TOŻSAMOŚĆ, usuwanie nie.
W większości implementacji DELETE
instrukcja może zwrócić klientowi usunięte wiersze.
np. w podprogramie Oracle PL / SQL można:
DELETE FROM employees_temp
WHERE employee_id = 299
RETURNING first_name,
last_name
INTO emp_first_name,
emp_last_name;
Różnica między obcinaniem a usuwaniem jest wymieniona poniżej:
+----------------------------------------+----------------------------------------------+
| Truncate | Delete |
+----------------------------------------+----------------------------------------------+
| We can't Rollback after performing | We can Rollback after delete. |
| Truncate. | |
| | |
| Example: | Example: |
| BEGIN TRAN | BEGIN TRAN |
| TRUNCATE TABLE tranTest | DELETE FROM tranTest |
| SELECT * FROM tranTest | SELECT * FROM tranTest |
| ROLLBACK | ROLLBACK |
| SELECT * FROM tranTest | SELECT * FROM tranTest |
+----------------------------------------+----------------------------------------------+
| Truncate reset identity of table. | Delete does not reset identity of table. |
+----------------------------------------+----------------------------------------------+
| It locks the entire table. | It locks the table row. |
+----------------------------------------+----------------------------------------------+
| Its DDL(Data Definition Language) | Its DML(Data Manipulation Language) |
| command. | command. |
+----------------------------------------+----------------------------------------------+
| We can't use WHERE clause with it. | We can use WHERE to filter data to delete. |
+----------------------------------------+----------------------------------------------+
| Trigger is not fired while truncate. | Trigger is fired. |
+----------------------------------------+----------------------------------------------+
| Syntax : | Syntax : |
| 1) TRUNCATE TABLE table_name | 1) DELETE FROM table_name |
| | 2) DELETE FROM table_name WHERE |
| | example_column_id IN (1,2,3) |
+----------------------------------------+----------------------------------------------+
UPUSZCZAĆ
Polecenie DROP usuwa tabelę z bazy danych. Wszystkie wiersze tabel, indeksy i uprawnienia również zostaną usunięte. Nie zostaną uruchomione żadne wyzwalacze DML. Nie można przywrócić operacji.
ŚCIĘTY
TRUNCATE usuwa wszystkie wiersze z tabeli. Nie można cofnąć operacji i nie zostaną uruchomione żadne wyzwalacze. W związku z tym TRUNCATE jest szybszy i nie wykorzystuje tyle miejsca na cofanie jak DELETE. Blokada poziomu stołu zostanie dodana podczas obcinania.
USUNĄĆ
Polecenie DELETE służy do usuwania wierszy z tabeli. Klauzuli WHERE można użyć do usunięcia tylko niektórych wierszy. Jeśli nie zostanie określony warunek GDZIE, wszystkie wiersze zostaną usunięte. Po wykonaniu operacji USUŃ musisz ZATWIERDZIĆ lub ZWRÓCIĆ transakcję, aby wprowadzić zmianę na stałe lub ją cofnąć. Pamiętaj, że ta operacja spowoduje uruchomienie wszystkich wyzwalaczy DELETE w tabeli. Blokada poziomu wiersza zostanie dodana podczas usuwania.
Od: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands
Wszystkie dobre odpowiedzi, do których muszę dodać:
Ponieważ TRUNCATE TABLE
jest to DDL ( Data Defination Language ), a nie DML ( Data Manipulation Langauge ), Delete Triggers
nie działają.
Podsumowanie usuwania Vs Truncate na serwerze SQL
Aby uzyskać pełny artykuł, kliknij ten link: http://codaffection.com/sql-server-article/delete-vs-truncate-in-sql-server/
Zaczerpnięte z artykułu mob dotnet: Usuń Vs Obcinaj w SQL Server
W przypadku SQL Server lub MySQL, jeśli istnieje PK z automatycznym przyrostem, obcinanie wyzeruje licznik.
DBCC CHECKIDENT (table_name, RESEED, 1)
„Truncate nic nie rejestruje” jest poprawne. Poszedłbym dalej:
Obcięcie nie jest wykonywane w kontekście transakcji.
Przewaga szybkości obcięcia nad usuwaniem powinna być oczywista. Ta przewaga waha się od trywialnych do ogromnych, w zależności od twojej sytuacji.
Widziałem jednak, że obcięcie nieumyślnie narusza integralność referencyjną i narusza inne ograniczenia. Siła, którą zyskujesz, modyfikując dane poza transakcją, musi być zrównoważona z odpowiedzialnością, którą dziedziczysz, gdy przechodzisz po linie bez sieci.
TRUNCATE
jest instrukcją DDL, podczas gdy DELETE
jest instrukcją DML. Poniżej znajdują się różnice między nimi:
Ponieważ TRUNCATE
jest to instrukcja DDL ( język definicji danych ), nie wymaga zatwierdzenia, aby zmiany były trwałe. Z tego powodu wiersze usunięte przez obcinanie nie mogły zostać przywrócone. Z drugiej strony DELETE
znajduje się instrukcja DML ( język manipulacji danymi ), dlatego wymaga wyraźnego zatwierdzenia, aby efekt był trwały.
TRUNCATE
zawsze usuwa wszystkie wiersze z tabeli, pozostawiając tabelę pustą i nienaruszoną strukturę tabeli, ale DELETE
może warunkowo usunąć warunek, jeśli użyto klauzuli where.
Wierszy usuniętych przez TRUNCATE TABLE
instrukcję nie można przywrócić i nie można określić klauzuli where w TRUNCATE
instrukcji.
TRUNCATE
instrukcje nie wyzwalają wyzwalaczy w przeciwieństwie do DELETE
instrukcji usuwania wyzwalacza na instrukcji
Oto bardzo dobry link związany z tematem.
Tak, DELETE działa wolniej, TRUNCATE jest szybszy. Dlaczego?
DELETE musi odczytać rekordy, sprawdzić ograniczenia, zaktualizować blok, zaktualizować indeksy i wygenerować ponawianie / cofanie. Wszystko to wymaga czasu.
TRUNCATE po prostu dostosowuje wskaźnik w bazie danych dla tabeli (High Water Mark) i poof! dane zniknęły.
Jest to specyficzne dla Oracle, AFAIK.
ŚCIĘTY
TRUNCATE Zapytanie SQL usuwa wszystkie wiersze z tabeli, bez rejestrowania usuniętych pojedynczych wierszy.
USUNĄĆ
Aby wykonać kolejkę DELETE, wymagane są uprawnienia do usuwania w tabeli docelowej. Jeśli musisz użyć klauzuli WHERE w USUŃ, wymagane są również wybrane uprawnienia.
Jeśli przypadkowo usunąłeś wszystkie dane z tabeli za pomocą Delete / Truncate. Możesz wycofać zatwierdzoną transakcję. Przywróć ostatnią kopię zapasową i uruchom dziennik transakcji do czasu, kiedy nastąpi usunięcie / obcięcie.
Powiązane informacje poniżej pochodzą z postu na blogu :
Podczas pracy z bazą danych korzystamy z funkcji Usuń i Obetnij, nie znając różnic między nimi. W tym artykule omówimy różnicę między usuwaniem a obcięciem w Sql.
Usunąć:
- Usuń to polecenie DML.
- Instrukcja usuwania jest wykonywana przy użyciu blokady wiersza, każdy wiersz w tabeli jest zablokowany do usunięcia.
- Możemy określić filtry w klauzuli where.
- Usuwa określone dane, jeśli istnieje warunek.
- Usuń działania wyzwalacza, ponieważ operacje są rejestrowane indywidualnie.
- Wolniej niż Obcinaj, ponieważ przechowuje dzienniki
Ścięty
- Obcięcie to polecenie DDL.
- Obcięta tabela zawsze blokuje tabelę i stronę, ale nie każdy wiersz, ponieważ usuwa wszystkie dane.
- Nie można użyć warunku Where.
- Usuwa wszystkie dane.
- Tabela obcinania nie może aktywować wyzwalacza, ponieważ operacja nie rejestruje usunięć poszczególnych wierszy.
- Szybszy pod względem wydajności, ponieważ nie prowadzi żadnych dzienników.
Uwaga: Usuń i Obetnij oba mogą być przywrócone, gdy są używane z transakcją. Jeśli transakcja zostanie wykonana, oznacza to popełnienie, nie możemy wycofać polecenia Skróć, ale nadal możemy cofnąć Usuń polecenie z plików dziennika, ponieważ usunięcie zapisu zapisuje je w pliku dziennika na wypadek, gdyby w przyszłości konieczne było wycofanie z plików dziennika.
Jeśli masz ograniczenie klucza obcego odnoszące się do tabeli, którą próbujesz obciąć, to nie zadziała, nawet jeśli tabela odwołująca się nie zawiera danych. Wynika to z tego, że sprawdzanie klucza obcego odbywa się za pomocą DDL, a nie DML. Można to obejść, tymczasowo wyłączając ograniczenia kluczy obcych w tabeli.
Usuń tabelę jest zarejestrowaną operacją. Usunięcie każdego wiersza jest rejestrowane w dzienniku transakcji, co powoduje, że jest powolny. Obcięta tabela usuwa również wszystkie wiersze w tabeli, ale nie rejestruje usunięcia każdego wiersza, lecz rejestruje dezalokację stron danych tabeli, co przyspiesza.
~ Jeśli przypadkowo usunąłeś wszystkie dane z tabeli za pomocą Delete / Truncate. Możesz wycofać zatwierdzoną transakcję. Przywróć ostatnią kopię zapasową i uruchom dziennik transakcji do czasu, kiedy nastąpi usunięcie / obcięcie.
W SQL Server 2005 uważam, że można cofnąć obcięcie
USUNĄĆ
Polecenie DELETE służy do usuwania wierszy z tabeli. Klauzuli WHERE można użyć do usunięcia tylko niektórych wierszy. Jeśli nie zostanie określony warunek GDZIE, wszystkie wiersze zostaną usunięte. Po wykonaniu operacji USUŃ musisz ZATWIERDZIĆ lub ZWRÓCIĆ transakcję, aby wprowadzić zmianę na stałe lub ją cofnąć. Pamiętaj, że ta operacja spowoduje uruchomienie wszystkich wyzwalaczy DELETE w tabeli.
ŚCIĘTY
TRUNCATE usuwa wszystkie wiersze z tabeli. Nie można cofnąć operacji i nie zostaną uruchomione żadne wyzwalacze. Jako taki, TRUCATE jest szybszy i nie wykorzystuje tyle miejsca na cofanie jak DELETE.
UPUSZCZAĆ
Polecenie DROP usuwa tabelę z bazy danych. Wszystkie wiersze tabel, indeksy i uprawnienia również zostaną usunięte. Nie zostaną uruchomione żadne wyzwalacze DML. Nie można przywrócić operacji.
DROP i TRUNCATE to polecenia DDL, natomiast DELETE to polecenie DML. Dlatego operacje DELETE można przywrócić (cofnąć), natomiast operacji DROP i TRUNCATE nie można przywrócić.
Od: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands
TRUNCATE można wycofać, jeśli jest zawarty w transakcji.
Sprawdź dwa odnośniki poniżej i sprawdź się: -
TRUNCATE vs. DELETE to jedno z niesławnych pytań podczas wywiadów SQL. Tylko upewnij się, że wyjaśniłeś to poprawnie ankieterowi, bo może to kosztować pracę. Problem polega na tym, że niewielu jest świadomych, więc najprawdopodobniej uznają odpowiedź za błędną, jeśli powiesz im, że TAK można skrócić.
Niewielka korekta oryginalnej odpowiedzi - usunięcie generuje również znaczne ilości powtórzeń (ponieważ cofnięcie jest chronione przez ponawianie). Można to zobaczyć na podstawie danych wyjściowych autotrace:
SQL> delete from t1;
10918 rows deleted.
Elapsed: 00:00:00.58
Execution Plan
----------------------------------------------------------
0 DELETE STATEMENT Optimizer=FIRST_ROWS (Cost=43 Card=1)
1 0 DELETE OF 'T1'
2 1 TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=43 Card=1)
Statistics
----------------------------------------------------------
30 recursive calls
12118 db block gets
213 consistent gets
142 physical reads
3975328 redo size
441 bytes sent via SQL*Net to client
537 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
10918 rows processed
Oto moja szczegółowa odpowiedź na temat różnicy między DELETE a TRUNCATE w SQL Server
• Usuń dane : po pierwsze, oba można wykorzystać do usunięcia wierszy z tabeli.
Ale USUŃ można użyć do usunięcia wierszy nie tylko ze tabeli, ale także z WIDOKU lub wyniku OPENROWSET lub OPENQUERY, w zależności od możliwości dostawcy.
• Klauzula FROM : Za pomocą DELETE można również usuwać wiersze z jednej tabeli / widoku / rowset_function_limited na podstawie wierszy z innej tabeli przy użyciu innej klauzuli FROM. W tej klauzuli FROM możesz także napisać normalne warunki JOIN. W rzeczywistości możesz utworzyć instrukcję DELETE z instrukcji SELECT, która nie zawiera żadnych funkcji agregujących, zastępując SELECT DELETE i usuwając nazwy kolumn.
Z TRUNCATE nie możesz tego zrobić.
• GDZIE : TRUNCATE nie może mieć GDZIE Warunki, ale USUŃ może. Oznacza to, że przy pomocy TRUNCATE nie można usunąć określonego wiersza lub określonej grupy wierszy. TRUNCATE TABLE jest podobna do instrukcji DELETE bez klauzuli WHERE.
• Wydajność : TRUNCATE TABLE jest szybszy i zużywa mniej zasobów systemowych i dzienników transakcji. Jednym z powodów są blokady stosowane przez którąkolwiek z instrukcji. Instrukcja DELETE jest wykonywana przy użyciu blokady wiersza, każdy wiersz w tabeli jest zablokowany do usunięcia. TRUNCATE TABLE zawsze blokuje tabelę i stronę, ale nie każdy wiersz.
• Dziennik transakcji : instrukcja DELETE usuwa wiersze pojedynczo i dokonuje indywidualnych wpisów w dzienniku transakcji dla każdego wiersza.
TRUNCATE TABLE usuwa dane poprzez cofnięcie przydziału stron danych używanych do przechowywania danych tabeli i zapisuje tylko dezalokacje stron w dzienniku transakcji.
• Strony : po wykonaniu instrukcji DELETE tabela może nadal zawierać puste strony. TRUNCATE usuwa dane poprzez cofnięcie przydziału stron danych używanych do przechowywania danych tabeli.
• Trigger : TRUNCATE nie aktywuje wyzwalaczy usuwania w tabeli. Musisz więc być bardzo ostrożny podczas korzystania z TRUNCATE. Nigdy nie należy używać TRUNCATE, jeśli w tabeli zdefiniowano usuwanie Trigger, aby wykonać pewne automatyczne czyszczenie lub rejestrowanie po usunięciu wierszy.
• Kolumna tożsamości : W przypadku TRUNCATE, jeśli tabela zawiera kolumnę tożsamości, licznik dla tej kolumny jest resetowany do wartości początkowej zdefiniowanej dla kolumny. Jeśli nie zdefiniowano nasion, używana jest wartość domyślna 1. DELETE nie resetuje licznika tożsamości. Więc jeśli chcesz zachować licznik tożsamości, użyj zamiast tego DELETE.
• Replikacja : USUŃ można użyć względem tabeli używanej w replikacji transakcyjnej lub replikacji scalającej.
Podczas gdy TRUNCATE nie może być użyte w stosunku do tabel zaangażowanych w replikację transakcyjną lub replikację scalającą.
• Wycofanie : instrukcja DELETE może zostać wycofana.
TRUNCATE można również przywrócić, pod warunkiem że jest on zawarty w bloku TRANSACTION, a sesja nie jest zamknięta. Po zamknięciu sesji nie będzie można wycofać TRUNCATE.
• Ograniczenia : Instrukcja DELETE może się nie powieść, jeśli narusza wyzwalacz lub próbuje usunąć wiersz, do którego odwołują się dane w innej tabeli z ograniczeniem FOREIGN KEY. Jeśli DELETE usuwa wiele wierszy, a jeden z usuniętych wierszy narusza wyzwalacz lub ograniczenie, instrukcja jest anulowana, zwracany jest błąd i żadne wiersze nie są usuwane.
A jeśli zostanie użyte USUŃ przeciwko Widokowi, Widok ten musi być widokiem aktualizowanym. Nie można użyć TRUNCATE w stosunku do tabeli używanej w widoku indeksowanym.
Funkcja TRUNCATE nie może być używana w odniesieniu do tabeli, do której odwołuje się ograniczenie KLUCZ ZAGRANICZNY, chyba że tabela ma klucz obcy, który się do niej odwołuje.
DECLARE @ai as bigint
SET @ai =IDENT_CURRENT('tablename')
TRUNCATE TABLE tablename
DBCC checkident('tablename', RESEED, @ai)
Największą różnicą jest to, że obcinanie jest operacją niezapisaną podczas usuwania.
Oznacza to po prostu, że w przypadku awarii bazy danych nie można odzyskać danych obsługiwanych przez obcinanie, ale można je usunąć.
Więcej informacji tutaj
Instrukcja DELETE: To polecenie usuwa tylko wiersze z tabeli na podstawie warunku podanego w klauzuli where lub usuwa wszystkie wiersze z tabeli, jeśli nie określono żadnego warunku. Ale nie zwalnia miejsca zawierającego tabelę.
Składnia instrukcji SQL DELETE jest następująca:
USUŃ Z nazwy_tabeli [GDZIE warunki];
Instrukcja TRUNCATE: To polecenie służy do usunięcia wszystkich wierszy z tabeli i zwolnienia miejsca zawierającego tabelę.
USUNĄĆ
DELETE is a DML command DELETE you can rollback Delete = Only Delete- so it can be rolled back In DELETE you can write conditions using WHERE clause Syntax – Delete from [Table] where [Condition]
ŚCIĘTY
TRUNCATE is a DDL command You can't rollback in TRUNCATE, TRUNCATE removes the record permanently Truncate = Delete+Commit -so we can't roll back You can't use conditions(WHERE clause) in TRUNCATE Syntax – Truncate table [Table]
Więcej informacji na stronie
http://www.zilckh.com/what-is-the-difference-between-truncate-and-delete/
Krótko mówiąc, obcinanie niczego nie rejestruje (jest znacznie szybsze, ale nie można go cofnąć), podczas gdy usuwanie jest rejestrowane (i może być częścią większej transakcji, spowoduje wycofanie itp.). Jeśli masz dane, których nie chcesz w tabeli w dev, zwykle lepiej je obciąć, ponieważ nie ryzykujesz wypełnienia dziennika transakcji
Głównym powodem, dla którego jest to przydatne, jest konieczność odświeżenia danych w wielomilionowej tabeli wierszy, ale nie chcesz ich odbudowywać. „Usuń *” trwałoby wieczność, podczas gdy wpływ Truncate na wyniki byłby znikomy.
Nie można wykonać DDL przez dblink.
Nie jest tak, że obcięcie nie rejestruje niczego w SQL Server. truncate nie rejestruje żadnych informacji, ale rejestruje stronę dezalokacji danych dla tabeli, na której uruchomiono TRUNCATE.
i skrócony rekord można przywrócić, jeśli zdefiniujemy transakcję na początku, i możemy odzyskać skrócony rekord po jego wycofaniu. Ale nie można odzyskać skróconych rekordów z kopii zapasowej dziennika transakcji po zatwierdzonej skróconej transakcji.
Przykład ścięcia można również przywrócić tutaj
begin Tran
delete from Employee
select * from Employee
Rollback
select * from Employee
Obcinanie i usuwanie w SQL to dwa polecenia służące do usuwania lub usuwania danych z tabeli. Chociaż dość podstawowe z natury oba polecenia Sql mogą powodować wiele problemów, dopóki nie zapoznasz się ze szczegółami przed ich użyciem. Nieprawidłowy wybór polecenia może spowodować bardzo powolny proces lub nawet wysadzenie segmentu dziennika, jeśli trzeba usunąć zbyt dużo danych, a segment dziennika nie wystarczy. Dlatego tak ważne jest, aby wiedzieć, kiedy należy użyć polecenia obcięcia i usunięcia w SQL, ale przed ich użyciem należy pamiętać o różnicach między przycinaniem i usuwaniem, a na ich podstawie powinniśmy dowiedzieć się, kiedy DELETE jest lepszą opcją do usunięcia data lub TRUNCATE powinny być używane do czyszczenia tabel.
Sprawdź sprawdź kliknij tutaj
Jeszcze jedna różnica specyficzna dla serwera Microsoft SQL Server polega na tym, delete
że można użyć output
instrukcji do śledzenia, które rekordy zostały usunięte, np .:
delete from [SomeTable]
output deleted.Id, deleted.Name
Nie możesz tego zrobić truncate
.