TRUNCATE
negeneruje žádná data o vrácení zpět, díky čemuž je bleskově rychlý. Pouze uvolní datové stránky používané tabulkou.
Pokud jste však v transakci a chcete mít možnost toto smazání "vrátit zpět", musíte použít DELETE FROM
, což dává možnost vrátit se zpět.
UPRAVIT: Všimněte si, že výše uvedené je nesprávné pro SQL Server (ale platí pro Oracle). V SQL Server je možné vrátit zpět operaci zkrácení, pokud jste uvnitř transakce a transakce nebyla potvrzena. Z pohledu SQL Serveru je jeden klíčový rozdíl mezi DELETE FROM a TRUNCATE toto :"Příkaz DELETE odstraňuje řádky jeden po druhém a zaznamenává záznam do transakčního protokolu pro každý smazaný řádek. TRUNCATE TABLE odstraňuje data uvolněním datových stránek používaných k ukládání dat tabulky a zaznamenává pouze dealokace stránek do transakčního protokolu. ."
Jinými slovy, během TRUNCATE dochází k menšímu protokolování, protože do protokolu transakcí jsou zaznamenány pouze dealokace stránek, zatímco při DELETE FROM se zaznamenává odstranění každého řádku. To je jeden z důvodů, proč je TRUNCATE bleskově rychlý.
Všimněte si také z tohoto odkazu MSDN, že nemůžete zkrátit tabulky, na které odkazují omezení cizího klíče, které se účastní indexovaného zobrazení nebo jsou publikovány pomocí transakční replikace nebo slučovací replikace.
ÚPRAVA 2: Dalším klíčovým bodem je, že TRUNCATE TABLE obnoví vaši identitu na původní počáteční hodnotu, zatímco DELETE FROM bude pokračovat ve zvyšování od místa, kde skončilo. Odkaz:Odpověď Bena Robinsona.