Delete vs Truncate
Båda SQL-kommandona (Structure Query Language), Delete och Truncate används för att bli av med data lagrade i tabeller i en databas. Delete är en DML-sats (Data Manipulation Language) och den tar bort några eller alla rader i en tabell. "Where-satsen" används för att specificera raderna som måste tas bort, och om Where-satsen inte används med Delete-satsen tar den bort all data i tabellen. Truncate är en DDL-sats (Data Definition Language) och den tar bort hela data från tabellen. Båda dessa kommandon förstör inte tabellstrukturen och referenserna till tabellen, och endast data tas bort vid behov.
Ta bort uttalande
Delete-satsen tillåter användaren att ta bort data från en befintlig tabell i en databas baserat på ett specificerat villkor, och "Where-satsen" används för att bestämma detta villkor. Delete-kommandot hänvisas till som en loggad körning, eftersom den bara tar bort en rad åt gången och behåller en post för varje radradering i transaktionsloggen. Så detta gör att operationen blir långsammare. Delete är en DML-sats, så den committeras inte automatiskt när kommandot körs. Därför kan raderingsåtgärden återställas för att komma åt data igen, om det behövs. Efter exekvering av Delete-kommandot bör det committeras eller rullas tillbaka för att spara ändringar permanent. Delete-satsen tar inte bort tabellens tabellstruktur från databasen. Det avallokerar inte heller minnesutrymmet som används av tabellen.
Den typiska syntaxen för kommandot Delete anges nedan.
DELETE FROM
eller
DELETE FROM WHERE
Truncate Statement
Truncate-satsen tar bort all data från en befintlig tabell i en databas, men den bevarar samma tabellstruktur, även integritetsbegränsningarna, åtkomstbehörigheter och relationerna till andra tabeller. Så det är inte nödvändigt att definiera tabellen igen, och den gamla tabellstrukturen kan användas om användaren vill återanvända tabellen igen. Truncate tar bort hela data genom att avallokera datasidorna som används för att lagra data, och endast dessa sidavallokeringar sparas i transaktionsloggen. Därför använder truncate-kommandot endast färre system- och transaktionsloggresurser för drift, så det är snabbare än andra relaterade kommandon. Truncate är ett DDL-kommando, så det använder automatiska åtaganden före och efter exekvering av satsen. Därför kan trunkering inte rulla tillbaka data igen på något sätt. Det frigör minnesutrymme som används av tabellen efter exekveringen. Men Truncate-satsen kan inte tillämpas på tabellerna som refereras av främmande nyckelbegränsningar.
Följande är den vanliga syntaxen för Truncate-satsen.
TRUNCATE TABLE
Vad är skillnaden mellan Delete och Truncate?
1. Kommandon Delete och Truncate tar bort data från befintliga tabeller i en databas utan att skada tabellstrukturen eller andra referenser till tabellen.
2. Men kommandot Delete kan användas för att ta bort specifika rader i en tabell med ett relevant villkor, eller för att radera alla rader utan något villkor, medan kommandot Truncate endast kan användas för att ta bort hela data i tabellen.
3. Delete är ett DML-kommando, och det kan rulla tillbaka operationen om det behövs, men Truncate är ett DDL-kommando, så det är en auto commit-sats och kan inte rullas tillbaka på något sätt. Så det är viktigt att använda detta kommando noggrant i databashantering.
4. Truncate-operationen förbrukar färre systemresurser och transaktionsloggresurser än Delete-operationen, därför anses Truncate vara snabbare än Delete.
5. Dessutom avallokerar inte Delete utrymme som används av tabellen, medan Truncate frigör utrymmet som används efter körning, så Delete är inte effektivt vid radering av hela data från en databastabell.
6. Truncate är dock inte tillåtet att använda när tabellen refereras av en främmande nyckel-begränsning, och i så fall kan kommandot Delete användas istället för Truncate.
7. Slutligen har båda dessa kommandon fördelar och även nackdelar med att tillämpa dem i databashanteringssystem och användaren bör vara medveten om att använda dessa kommandon på rätt sätt för att uppnå goda resultat.