Slet vs Truncate
Både SQL-kommandoer (Structure Query Language), Delete og Truncate bruges til at slippe af med data gemt i tabeller i en database. Slet er en DML-sætning (Data Manipulation Language), og den fjerner nogle eller alle rækkerne i en tabel. 'Where-sætningen' bruges til at angive de rækker, der skal slettes, og hvis Where-sætningen ikke bruges med Delete-sætningen, fjerner den alle data i tabellen. Truncate er en DDL-sætning (Data Definition Language), og den fjerner hele data fra tabellen. Begge disse kommandoer ødelægger ikke tabelstrukturen og referencerne til tabellen, og kun dataene fjernes efter behov.
Slet erklæring
Delete-sætning tillader brugeren at fjerne data fra en eksisterende tabel i en database baseret på en specificeret betingelse, og 'Where-sætningen' bruges til at bestemme denne betingelse. Slet-kommando omtales som en logget udførelse, fordi den kun sletter én række ad gangen og beholder en post for hver rækkesletning i transaktionsloggen. Så dette gør operationen langsommere. Slet er en DML-sætning, og den bliver derfor ikke automatisk begået, mens kommandoen udføres. Derfor kan Slet-handlingen rulles tilbage for at få adgang til dataene igen, hvis det kræves. Efter udførelse af Slet-kommandoen skal den begås eller rulles tilbage for at gemme ændringer permanent. Slet-sætning fjerner ikke tabellens tabelstruktur fra databasen. Den tildeler heller ikke den hukommelsesplads, der bruges af tabellen.
Den typiske syntaks for Slet-kommandoen er angivet nedenfor.
DELETE FROM
eller
DELETE FROM WHERE
Truncate Statement
Truncate-sætning fjerner alle data fra en eksisterende tabel i en database, men den bevarer den samme tabelstruktur, også integritetsbegrænsningerne, adgangsrettigheder og relationerne til andre tabeller. Så det er ikke nødvendigt at definere tabellen igen, og den gamle tabelstruktur kan bruges, hvis brugeren ønsker at genbruge tabellen igen. Truncate fjerner hele data ved at deallokere de datasider, der bruges til at opbevare data, og kun disse sidedeallokeringer gemmes i transaktionsloggen. Derfor bruger truncate-kommandoen kun færre system- og transaktionslogressourcer til drift, så den er hurtigere end andre relaterede kommandoer. Truncate er en DDL-kommando, så den bruger automatiske forpligtelser før og efter udførelse af sætningen. Afkortning kan derfor ikke rulle dataene tilbage på nogen måde. Det frigiver hukommelsesplads brugt af tabellen efter udførelsen. Men Truncate-sætningen kan ikke anvendes på de tabeller, der refereres til af fremmednøglebegrænsninger.
Følgende er den fælles syntaks for Truncate-sætning.
TRUNCATE TABLE
Hvad er forskellen mellem Slet og Truncate?
1. Slet- og Truncate-kommandoer fjerner data fra eksisterende tabeller i en database uden at skade tabelstrukturen eller andre referencer til tabellen.
2. Delete-kommandoen kan dog bruges til kun at slette specifikke rækker i en tabel ved hjælp af en relevant betingelse, eller til at slette alle rækkerne uden nogen betingelse, mens Truncate-kommandoen kun kan bruges til at slette hele data i tabellen.
3. Delete er en DML-kommando, og den kan rulle handlingen tilbage, hvis det er nødvendigt, men Truncate er en DDL-kommando, så det er en auto commit-sætning og kan ikke rulles tilbage på nogen måde. Så det er vigtigt at bruge denne kommando omhyggeligt i databasestyring.
4. Truncate-operationen bruger færre systemressourcer og transaktionslogressourcer end Slet-handlingen, og derfor anses Truncate for at være hurtigere end Slet.
5. Delete tildeler heller ikke plads, der bruges af tabellen, hvorimod Truncate frigør den plads, der bruges efter udførelse, så Delete er ikke effektiv i tilfælde af sletning af hele data fra en databasetabel.
6. Truncate er dog ikke tilladt at bruge, når tabellen refereres af en fremmednøglebegrænsning, og i så fald kan Delete-kommandoen bruges i stedet for Truncate.
7. Endelig har begge disse kommandoer fordele og også ulemper ved at anvende dem i databasestyringssystemer, og brugeren bør være opmærksom på at bruge disse kommandoer korrekt for at opnå gode resultater.