U SQL-u, naredba TRUNCATE TABLE
služi za brzo brisanje svih podataka iz tablice, čime se zaobilazi niz mehanizama za zaštitu referencijalnog integriteta.
Naredba TRUNCATE TABLE mytable
je skoro posve ekvivalentna naredbi DELETE FROM mytable
(bez klauzule WHERE
). Iznimke su:
- U Oracle-u,
TRUNCATE
je implicitno praćen operacijom commit. - Tipično,
TRUNCATE TABLE
brzo briše sve slogove dealocirajući stranice podataka koje tablica koristi. Ovo smanjuje potrebu za resursima Transaction log-a i zaključavanja baze. Slogovi brisani na ovaj način se ne mogu vratiti uz pomoć rollback operacije. Iznimka je implementacije PostgreSQL-a, gdje jeTRUNCATE TABLE
transakcijska, pa se cijela brisana tablica čuva do sljedeće naredbeCOMMIT
iliROLLBACK
. - Nije moguće koristit klauzulu
WHERE
uzTRUNCATE TABLE
- briše se sve ili ništa. TRUNCATE TABLE
ne pokreće trigger-e (ON DELETE
/ON UPDATE
), koji se tipično javljaju kod brisanja primarnog ključa koji je korišten kao strani ključ u drugim tablicama. Ovo može rezultirati u nekonzistentnim podacima.- u nekim sustavima,
TRUNCATE TABLE
resetira brojač Identity columna na početak. - U Microsoft SQL Server-u,
TRUNCATE TABLE
se ne može koristiti za tablice uključene u replikaciju ili log shipping, jer o tim tablicama ovisi konzistentnost baze, a one same ovise o transaction log-u.
|