Trunkate (SQL)
I SQL är TRUNCATE TABLE -satsen
en DDL-operation ( Data Definition Language ) som markerar omfattningen av en tabell för avallokering (tom för återanvändning). Resultatet av den här operationen tar snabbt bort all data från en tabell , vilket vanligtvis kringgår ett antal integritetsupprätthållande mekanismer. Den introducerades officiellt i SQL:2008- standarden, som den valfria funktionen F200, "TRUNCATE TABLE-sats".
TRUNCATE TABLE tar bort alla rader från en tabell, men tabellstrukturen och dess kolumner, begränsningar, index och så vidare finns kvar. För att ta bort tabelldefinitionen utöver dess data, använd DROP TABLE- satsen.
TRUNCATE TABLE mytable
-satsen är logiskt (men inte fysiskt) ekvivalent med DELETE FROM mytable
-satsen (utan en WHERE
-sats). Följande egenskaper skiljer TRUNCATE TABLE
från DELETE
:
- I Oracle-databasen föregås
TRUNCATE implicit och följs av en
commit- operation . (Detta kan också vara fallet i MySQL när du använder en transaktionslagringsmotor.) - Vanligtvis tar
TRUNCATE TABLE
snabbt bort alla poster i en tabell genom att deallokera datasidorna som används av tabellen. Detta minskar resursoverheaden för att logga borttagningarna, såväl som antalet förvärvade lås . Poster som tagits bort på detta sätt kan inte återställas i en återställningsåtgärd. Två anmärkningsvärda undantag från denna regel är implementeringarna som finns i PostgreSQL och Microsoft SQL Server , som båda tillåterTRUNCATE TABLE
-satser att begås eller återställas transaktionellt. - Det är inte möjligt att ange en
WHERE
-sats i enTRUNCATE TABLE-
sats. -
TRUNCATE TABLE
kan inte användas när en främmande nyckel refererar till tabellen som ska trunkeras, eftersomTRUNCATE TABLE
-satser inte utlöser utlösare . Detta kan resultera i inkonsekventa data eftersomON DELETE
/ON UPDATE-
utlösare inte aktiveras. - I vissa datorsystem återställer
TRUNCATE TABLE
räkningen av en identitetskolumn tillbaka till identitetens startpunkt . - I Microsoft SQL Server 2000 och senare i fullt återställningsläge loggas varje ändring av databasen, så
TRUNCATE TABLE-
satser kan användas för tabeller som är involverade i loggsändning .