Skróć (SQL)

W języku SQL instrukcja TRUNCATE TABLE jest operacją języka definicji danych (DDL), która oznacza zakresy tabeli do cofnięcia alokacji (puste do ponownego wykorzystania). Wynik tej operacji powoduje szybkie usunięcie wszystkich danych z tabeli , zwykle z pominięciem wielu mechanizmów wymuszających integralność. Został oficjalnie wprowadzony w SQL:2008 jako opcjonalna funkcja F200, „instrukcja TRUNCATE TABLE”.

TRUNCATE TABLE usuwa wszystkie wiersze z tabeli, ale struktura tabeli i jej kolumny, ograniczenia, indeksy itd. pozostają niezmienione. Aby usunąć definicję tabeli oprócz jej danych, użyj DROP TABLE .

Instrukcja TRUNCATE TABLE mytable jest logicznie (choć nie fizycznie) równoważna instrukcji DELETE FROM mytable (bez klauzuli WHERE ). Następujące cechy odróżniają TRUNCATE TABLE od DELETE :

  • W Oracle Database , TRUNCATE jest niejawnie poprzedzone i następujące po operacji zatwierdzenia . (Może tak być również w przypadku MySQL , gdy używany jest transakcyjny silnik pamięci).
  • Zazwyczaj TRUNCATE TABLE szybko usuwa wszystkie rekordy w tabeli, zwalniając strony danych używane przez tabelę. Zmniejsza to obciążenie zasobów związane z rejestrowaniem usunięć, a także liczbę uzyskanych blokad . Rekordów usuniętych w ten sposób nie można przywrócić w operacji wycofywania. Dwa godne uwagi wyjątki od tej reguły to implementacje znalezione w PostgreSQL i Microsoft SQL Server , z których oba umożliwiają transakcyjne zatwierdzanie lub wycofywanie instrukcji TRUNCATE TABLE .
  • Nie można określić klauzuli WHERE w instrukcji TRUNCATE TABLE .
  • TRUNCATE TABLE , gdy klucz obcy odwołuje się do tabeli, która ma zostać obcięta, ponieważ instrukcje TRUNCATE TABLE nie uruchamiają wyzwalaczy . Może to spowodować niespójność danych, ponieważ ON DELETE / ON UPDATE nie uruchamiają się.
  • W niektórych systemach komputerowych TRUNCATE TABLE resetuje liczbę kolumn Tożsamości z powrotem do źródła tożsamości .
  • W programie Microsoft SQL Server 2000 i nowszych wersjach w trybie pełnego odzyskiwania każda zmiana w bazie danych jest rejestrowana, więc instrukcji TRUNCATE TABLE można używać w przypadku tabel związanych z wysyłaniem dziennika .