|
Příkaz INSERT | SQL příkazy | Příkaz SELECT INTO |
příkaz_DELETE ::= DELETE FROM [schema.]jméno_tabulky [ WHERE podmínka ]
Popis
Příkaz DELETE (neboli Searched DELETE) vymaže záznamy z dané tabulky. Není-li použita omezující podmínka, příkaz vymaže všechny záznamy v tabulce, jinak se vymažou pouze záznamy podmínce vyhovující. Záznamy jsou jen smazané, je možné je případně obnovit nebo definitivně uvolnit (automatické uvolňování mazaných záznamů lze nastavit pomocí příznaku kompatibility SQLOPT_EXPLIC_FREE
). Počet zrušených záznamů je možné po provedení zjistit pomocí systémové proměnné @@ROWCOUNT.
Je-li tabulka prefixována jménem aplikace (na stejném serveru), tabulka se hledá v uvedené aplikaci (schématu).
Místo tabulky lze příkaz provádět i s pevným dotazem (VIEW), který umožňuje mazání záznamů (toto se rozpozná již při překladu).
Příkaz DELETE vyvolá DELETE trigger pro každý rušený záznam. BEFORE DELETE trigger se provede PŘED smazáním záznamu, AFTER DELETE trigger po smazaní. Dojde-li v triggeru k chybě, je obou případech příkaz DELETE odvolán.
Je-li tabulka, na níž je příkaz DELETE prováděn, nadřízenou tabulkou v aktivní referenční integritě (RI), mohou nastat dva případy:
Uživatel, který ruší záznamy, musí mít k této činnosti dostatek efektivních práv.
Častým případem použití tohoto příkazu je kompletní vymazání obsahu tabulky. Pokud tabulka obsahuje indexy, bývá rychlejší indexy nejprve zrušit příkazem DROP INDEX, poté provést smazání příkazem DELETE (a uvolnění pomocí
Od verze 8.1 existuje pro tyto případy funkce Truncate_table
použitelná i v SQL na serveru.
Příklady použití
Vymazat záznamy patřící do oddělení 1
DELETE FROM Zamestnan WHERE Oddeleni = 1
Vymazat záznamy, které mají hodnotu sloupce cislo
větší než průměrnou
DELETE FROM Tab3
WHERE cislo > (SELECT Avg(cislo) FROM Tab3);
Viz
Příkaz INSERT | SQL příkazy | Příkaz SELECT INTO |