Beste antwoord
Allereerst “HET IS NIET MOGELIJK OM EEN VELD AF TE KORTEN”.
Afkappen is een concept in de database dat niet lijkt op een delete-statement of een update. Het belangrijkste concept van Truncate is hoe de metagegevens achter de schermen worden verwerkt. Als u met Oracle werkt, kunt u het concept “High Water Mark” bestuderen. Je kunt het tot in detail vinden in Burlesons blog hier.
In Sql-server als u denkt aan een primaire sleutel met een automatische ophogingswaarde, zet deze dan af op de basis. Ik bedoel de startwaarde die door jou is gedefinieerd of standaard 1. Dus, wat voor bewerkingen het in de backend doet, is specifieker voor metagegevens en meer specifiek voor de eigenschap op tabelniveau van een database.
Nu, als je wilde bedoelen dat je een kolom wilt opschonen, je kunt gewoon een update starten met NULL voor die specifieke kolom of je kunt updaten met .
Update TABLE
Set Column = NULL/’’
Where 1 =1
Ik noemde dit als laatste waar clausule omdat tegenwoordig veel databases je niet toestaan om de hele kolom bij te werken zonder een where-clausule. In mySql riep het als “Safe Update flag” . Maar om specifieker te zijn, update altijd met NULL in plaats van ‘’ om een goede gewoonte te volgen.
Antwoord
DELETE is een gelogde bewerking op een rij. Dit betekent dat het verwijderen van elke rij fysiek wordt geregistreerd en verwijderd. U kunt elke rij verwijderen die geen overtreding van de beperking inhoudt, terwijl u de externe sleutel of andere beperkingen laat staan.
TRUNCATE is een gelogde bewerking, maar op een andere manier. TRUNCATE registreert de deallocatie van informatiepaginas waarin informatie aanwezig is. Het ongedaan maken van de toewijzing van informatiepaginas betekent dat uw informatierijen nog steeds bestaan op de informatiepaginas, maar de extensies zijn gemarkeerd als leeg voor hergebruik. Dit is wat TRUNCATE een snellere bewerking maakt om uit te voeren via DELETE. Kan een tabel niet afkappen met beperkingen voor externe sleutels. U moet de beperkingen verwijderen, de tabel afkappen en de beperkingen opnieuw toepassen.
TRUNCATE zal alle identiteitskolommen terugzetten naar de standaardwaarde-initialisatie. Dit betekent dat als u een tabel heeft met een identiteitskolom & 264 rijen heeft met een beginwaarde van 1, zijn laatste record de waarde 264 heeft (ervan uitgaande dat u bent begonnen met waarde 1) in de kolommen van uw identiteit. Na het afkappen van uw tabel wanneer u een nieuw record invoegt in de lege tabel, heeft de identiteitskolom de waarde 1. DELETE zal niet worden gebruikt. In hetzelfde scenario, als de huidige rij, een nieuwe rij invoegen in de lege tabel , heeft de identiteitskolom een waarde van 265.
Waarom is Truncate sneller dan Delete?
Reden: in schrijven om alle informatie te verwijderen wordt gekopieerd naar de terugdraaitabelruimte en vervolgens wordt de verwijderbewerking uitgevoerd. Dus wanneer u ROLLBACK typt na het verwijderen van een tabel, kunt u de informatie terugkrijgen (de methode krijgt het voor het tempo van Rollback Tables). Dit geheel techniek kost tijd, maar als je TRUNCATE gebruikt, wordt de informatie direct verwijderd zonder deze naar de Rollback-tabelruimte te kopiëren. Dus TRUNCATE is sneller. Twee keer afgekapt kun je de informatie niet terugkrijgen.