Truncate
TRUNCATE – polecenie języka SQL.
TRUNCATE TABLE jest poleceniem należącym do DDL, które oznacza obszar wymienionej w poleceniu tabeli do dealokacji (jako pustą do ponownego użycia). Przeprowadzenie operacji TRUNCATE powoduje szybkie usunięcie danych z tabeli, zazwyczaj z pominięciem mechanizmów wymuszających integralność danych. Polecenie zostało oficjalnie wprowadzone w standardzie SQL:2008[1].
Polecenie TRUNCATE TABLE nazwa_tabeli jest logicznie, ale nie fizycznie, identyczne z poleceniem DELETE FROM nazwa_tabeli (bez użycia WHERE). Polecenia TRUNCATE i DELETE różnią się następującymi cechami:
- W poleceniu TRUNCATE nie jest dozwolone użycie WHERE – zawsze usuwane są wszystkie dane.
- Zazwyczaj polecenie TRUNCATE działa poprzez alokację stron używanych przez daną tabelę co znacząco zmniejsza zużycie zasobów w porównaniu do instrukcji DELETE. Wiersze usunięte w ten sposób nie mogą być przywrócone przez polecenie ROLLBACK. Wyjątkami są tutaj PostgreSQL i Microsoft SQL Server, których implementacja polecenia TRUNCATE pozwala na użycie polecenia w transakcji.
- Polecenie TRUNCATE nie może być użyte gdy istnieją klucze odwołujące się do tabeli, na której ma zostać przeprowadzona operacja TRUNCATE, ponieważ istniejące triggery (ON DELETE, ON UPDATE) nie mogłyby zostać uruchomione.
- W systemie Oracle TRUNCATE jest niejawnie poprzedzony i zatwierdzany poleceniem commit.
Do standardu SQL należą także klauzule RESTART IDENTITY oraz CONTINUE IDENTITY, które zerują, bądź zachowują sekwencję przypisaną do tabeli.
TRUNCATE TABLE nazwa_tabeli RESTART IDENTITY;
Za pomocą polecenia TRUNCATE istnieje również możliwość usunięcia danych z tabel powiązanych za pomocą kluczy obcych:
TRUNCATE nazwa_tabeli CASCADE;