Stavek DELETE uporabljamo za brisanje vrstic iz tabele. Z njim lahko izbrišemo eno vrstico, več vrstic ali vse vrstice v tabeli. Ker ukaz odstranjuje podatke, ga uporabljamo posebej previdno.
Pri brisanju podatkov je najpomembnejši del poizvedbe pogoj WHERE. Ta določa, katere vrstice bodo izbrisane. Če pogoj izpustimo, se lahko izbrišejo vsi zapisi v tabeli.
Pomni: Stavek DELETE briše vrstice iz tabele, ne izbriše pa same tabele. Zgradba tabele ostane nespremenjena.
Pred izvedbo ukaza DELETE je priporočljivo najprej z enakim pogojem izvesti poizvedbo SELECT. Tako preverimo, kateri zapisi bodo izbrisani.
Vsebina strani
Osnovna pravila
Pri brisanju podatkov moramo natančno vedeti, iz katere tabele brišemo in kateri zapisi ustrezajo pogoju. Stavek DELETE je preprost, vendar lahko ob napačnem pogoju povzroči izgubo podatkov.
DELETE FROMdoloča tabelo, iz katere brišemo zapise.WHEREdoloča pogoj za izbiro vrstic, ki bodo izbrisane.- Če pogoj
WHEREmanjka, se izbrišejo vse vrstice v tabeli. - Stavek
DELETEne izbriše zgradbe tabele. - Za brisanje celotne tabele kot objekta uporabimo
DROP TABLE, neDELETE.
Pozor: Ukaz DELETE brez pogoja WHERE izbriše vse zapise v tabeli. Pred izvedbo takšnega ukaza je treba preveriti, ali je to res želeno.
Osnovna sintaksa stavka DELETE
Osnovna oblika stavka je:
DELETE FROM ime_tabele
WHERE pogoj;
Za besedo FROM napišemo ime tabele, za besedo WHERE pa pogoj, ki določa, katere vrstice želimo izbrisati.
Brisanje ene vrstice
Če pogoj določa en sam zapis, se izbriše samo ena vrstica. V naslednjem primeru izbrišemo zapis iz tabele drzave, kjer je vrednost stolpca st enaka 210:
DELETE FROM drzave
WHERE st = 210;
Pogosto za brisanje enega zapisa uporabimo glavni ključ, na primer stolpec id ali drug enoličen identifikator.
Pomni: Najvarneje je brisati po stolpcu, ki enolično določa zapis, na primer po glavnem ključu. Tako zmanjšamo možnost, da bi po pomoti izbrisali več zapisov.
Brisanje več vrstic
Če pogoj ustreza več vrsticam, ukaz DELETE izbriše vse te vrstice. V naslednjem primeru izbrišemo vse zapise iz tabele dijaki, kjer je stolpec oddelek enak 4a:
DELETE FROM dijaki
WHERE oddelek = '4a';
Tak ukaz je smiseln samo, če res želimo odstraniti vse zapise, ki ustrezajo izbranemu pogoju.
DELETE brez pogoja WHERE
Če pri stavku DELETE izpustimo pogoj WHERE, se izbrišejo vse vrstice v tabeli.
DELETE FROM drzave;
Po takem ukazu tabela še vedno obstaja, vendar v njej ni več zapisov.
Pri ukazu DELETE je pogoj WHERE ključnega pomena. Manjkajoč ali napačen pogoj lahko povzroči izbris napačnih podatkov.
Razlika med DELETE in TRUNCATE
Ukaz DELETE briše vrstice iz tabele. Če uporabimo pogoj WHERE, lahko izbrišemo samo izbrane vrstice. Ukaz TRUNCATE TABLE pa hitro izprazni celotno tabelo.
TRUNCATE TABLE drzave;
Za začetno delo je pomembno predvsem naslednje:
DELETE ... WHEREuporabimo, kadar želimo izbrisati samo določene vrstice,DELETEbrezWHEREizbriše vse vrstice, vendar je še vedno zapisan kot ukaz za brisanje vrstic,TRUNCATE TABLEuporabimo, kadar želimo izprazniti celotno tabelo.
Pozor: Ukaz TRUNCATE TABLE ni namenjen brisanju izbranih vrstic. Uporabimo ga samo takrat, ko želimo izprazniti celotno tabelo.
Varno preverjanje pred brisanjem
Preden izvedemo ukaz DELETE, je priporočljivo najprej preveriti, katere vrstice ustrezajo pogoju. To naredimo z ukazom SELECT.
SELECT * FROM drzave
WHERE st = 210;
DELETE FROM drzave
WHERE st = 210;
Če poizvedba SELECT pokaže pričakovane zapise, lahko nato izvedemo ustrezen ukaz DELETE.
Primerjava načinov brisanja
Različni ukazi za brisanje imajo različne učinke. Pomembno je razlikovati med brisanjem zapisov in brisanjem same tabele.
| Ukaz | Kaj naredi | Primer uporabe |
|---|---|---|
DELETE ... WHERE |
Izbriše samo zapise, ki ustrezajo pogoju. | DELETE FROM drzave WHERE st = 210; |
DELETE brez WHERE |
Izbriše vse zapise v tabeli, tabela pa ostane. | DELETE FROM drzave; |
TRUNCATE TABLE |
Izprazni celotno tabelo. | TRUNCATE TABLE drzave; |
DROP TABLE |
Izbriše tabelo kot objekt, skupaj z njeno zgradbo in podatki. | DROP TABLE drzave; |
Priporočila
- Pred ukazom
DELETEvedno preveri pogoj z ukazomSELECT. - Za brisanje posameznega zapisa uporabi glavni ključ ali drug enoličen stolpec.
- Pri brisanju več zapisov preveri, koliko vrstic ustreza pogoju.
- Ukaza
DELETEbrezWHEREne uporabljaj, razen če želiš izbrisati vse zapise. - Pred brisanjem pomembnih podatkov naredi varnostno kopijo.
- Razlikuj med
DELETE,TRUNCATE TABLEinDROP TABLE.
Pogoste napake
- Manjkajoč pogoj
WHEREpri ukazuDELETE. - Napačno zapisan pogoj, zaradi katerega se izbrišejo napačni zapisi.
- Brisanje po stolpcu, ki ni enoličen, čeprav je bil namen izbrisati samo en zapis.
- Zamenjevanje ukazov
DELETE,TRUNCATE TABLEinDROP TABLE. - Izvedba brisanja brez predhodnega preverjanja z ukazom
SELECT. - Brisanje podatkov brez varnostne kopije v primerih, ko so podatki pomembni.
Pozor: Pri brisanju podatkov je treba pred izvedbo ukaza preveriti, ali pogoj izbere pravilne zapise. Napaka pri pogoju lahko povzroči izgubo podatkov, ki jih pozneje ni mogoče preprosto obnoviti.