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åter TRUNCATE TABLE -satser att begås eller återställas transaktionellt.
  • Det är inte möjligt att ange en WHERE -sats i en TRUNCATE TABLE- sats.
  • TRUNCATE TABLE kan inte användas när en främmande nyckel refererar till tabellen som ska trunkeras, eftersom TRUNCATE TABLE -satser inte utlöser utlösare . Detta kan resultera i inkonsekventa data eftersom ON 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 .