Doporučená, 2021

Redakce Choice

Rozdíl mezi DELETE a TRUNCATE v SQL

DELETE a TRUNCATE jsou příkazy, které slouží k odstranění n-tic z relace, ale liší se v mnoha kontextech. V příkazu SQL je příkaz DELETE příkazem Data Manipulation Language, zatímco příkaz TRUNCATE je příkaz jazyka Data Definition Language . Však bod, který nám umožňuje rozlišovat mezi DELETE a TRUNCATE je, že DELETE je schopen odstranit zadané n-tice z relace, zatímco příkaz TRUNCATE odstraní celé n-tice z relace.

neměli bychom tady zastavit, existuje mnoho dalších rozdílů mezi DELETE a TRUNCATE. Promluvme si o nich pomocí srovnávací tabulky uvedené níže.

Srovnávací graf

Základ pro porovnáníDELETETRUNCATE
ZákladníMůžete určit n-tici, kterou chcete odstranit.Odstraní všechny n-tice z relace.
JazykDELETE je příkaz Jazyk pro manipulaci s daty.TRUNCATE je příkaz Jazyk pro definici dat.
KDEPříkaz DELETE může mít klauzuli WHERE.Příkaz TRUNCATE nemá klauzuli WHERE.
SpoušťPříkaz DELETE aktivuje spouštěč aplikovaný na stůl a způsobí, že se spustí.Příkaz TRUNCATE neaktivuje aktivační události.
SmazáníPříkaz DELETE odstraní n-tice po jednom.TRUNCATE smaže celou datovou stránku obsahující n-tice.
ZámekPříkaz DELETE zamkne řádek / n-tici před jeho odstraněním.Před vymazáním dat tabulky TRUNCATE zamkněte datovou stránku příkazu lock.
RychlostPříkaz DELETE působí pomaleji ve srovnání s příkazem TRUNCATE.TRUNCATE je rychlejší než DELETE.
TransakceDELETE zaznamenává protokol transakcí pro každou vymazanou n-tici.TRUNCATE záznam transakce protokolu pro každou stránku odstraněných dat.
ObnovitPříkaz DELETE může být následován příkazem COMMIT nebo ROLLBACK.Příkaz TRUNCATE nemůže být ROLLBACK.

Definice DELETE

DELETE je příkaz jazyka DML ( Data Manipulation Language ). Úkolem příkazu DELETE je odstranit nebo odebrat n-tice z tabulky nebo relace. Pomocí DELETE můžeme eliminovat celou n-tici se všemi jejími hodnotami atributů z relace. DELETE neodstraní hodnotu určitého atributu n-tice z relace.

Tuply, které chcete odstranit z tabulky, můžete filtrovat pomocí klauzule WHERE . Pokud zadáte klauzuli WHERE v příkazu DELETE, pak bude smazána pouze tupice splňující podmínku klauzule WHERE. Pokud ale nezadáte klauzuli WHERE v příkazu DELETE, pak ve výchozím nastavení odstraní nebo odstraní všechny n-tice z relace. Klauzule WHERE v příkazu DELETE může obsahovat vnořené příkazy SELECT-FROM-WHERE .

Syntaxe příkazu DELETE je následující:

DELETE FROM table_name WHERE [ conditon ];

Příkaz DELETE pracuje pouze na jediném vztahu nebo tabulce najednou. V případě, že chcete odstranit n-tici z různých vztahů, musíte pro každý z nich zadat jiný příkaz DELETE. Odstranění n-tice z jednoho vztahu však může porušit referenční integritu databáze, kterou lze vyřešit pomocí spouštěčů. Pokud příkaz DELETE porušuje referenční integritu, aktivují se všechny referenční spouštěče (pokud jsou zadány), které propagují akci odstranění na n-ticích odlišného vztahu, který odkazuje na odstraněné n-tice.

Příkaz DELETE nejprve uzamkne řádek nebo n-tici, které mají být vymazány, a potom jeden po druhém odstraňte n - tici. Proto to vyžaduje více zámků a prostředků, které ho pomalejší . Změny provedené příkazem DELETE můžete provést pomocí příkazu COMMIT nebo můžete databázi obnovit pomocí funkce ROLLBACK .

Definice TRUNCATE

TRUNCATE je podobný příkazu DELETE, protože také odstraňuje n-tice z relace. Rozdíl je v tom, že z relace odstraní celé n-tice. Když je příkaz TRUNCATE spuštěn, všechna data z tabulky se vymažou, každá n-tice spolu se všemi hodnotami atributů se z tabulky odstraní. Struktura tabulky však stále existuje v databázi. V tabulce můžete opět zadat n-tice. TRUNCATE je příkaz Jazyk pro definici dat.

Syntaxe příkazu TRUNCATE je následující:

TRUNCATE TABLE název_tabulky ;

Podobně jako DELETE TRUNCATE nepracuje s daty tabulky řádek po řádku. Místo toho pracuje na datových stránkách, které ukládají data tabulky. Nyní, když TRUNCATE smaže datové stránky, musí získat zámek na datových stránkách namísto n-tic. Výsledkem je tedy méně požadavku na zámky a prostředky, díky čemuž je TRUNCATE rychlejší než DELETE.

Spuštění příkazu TRUNCATE neaktivuje žádné spouštěče, protože neprovozuje data řádek po řádku. TRUNCATE nelze provést v případě, že se na tabulku odkazuje nějaký cizí klíč . Jakmile příkaz TRUNCATE smaže data tabulky, nemůže být nikdy vrácen zpět.

Klíčové rozdíly Mezi DELETE a TRUNCATE v SQL

  1. Hlavní rozdíl mezi DELETE a TRUNCATE je, že pomocí DELETE můžete smazat zadanou n-tici z relace. Ale použití TRUNCATE odstraní celé n-tice z relace.
  2. DELETE je příkaz DML, zatímco příkaz TRUNCATE je příkaz DDL.
  3. DELETE používá klauzuli WHERE k filtrování záznamů / n-tic, které mají být vymazány. TRUNCATE však nevyžaduje klauzuli WHERE, protože odstraní všechny n-tice, takže není třeba filtrovat n-tice.
  4. DELETE aktivuje referenční spouštěče aplikované na tabulky. TRUNCATE ale na stole nespustí žádné spouštěče.
  5. Příkaz DELETE odstraní n-tice po jednom z tabulky v pořadí, v jakém jsou zpracovány. TRUNCATE však nefunguje na n-tice. Místo toho TRUNCATE pracuje na datové stránce, která ukládá data tabulky.
  6. DELETE smazat zámek na n-tice před smazáním, zatímco TRUNCATE získat zámek na datové stránce před odstraněním datové stránky.
  7. TRUNCATE je rychlejší než příkaz DELETE.
  8. DELETE záznam transakčního protokolu pro každou n-tici, zatímco TRUNCATE záznam transakce protokolu pro každou datovou stránku.
  9. Jakmile smažete data pomocí funkce TRUNCATE, nemůže být nikdy obnovena zpět, protože data, která jste smazali, můžete obnovit pomocí příkazu DELETE.

Závěr:

Pokud chcete upravit vymazání záznamů z tabulky, můžete použít příkaz DELETE. Pokud chcete tabulku vyprázdnit, tj. Nechcete v tabulce ponechat žádná data, použijte příkaz TRUNCATE.

Top