Načrtovanje in razvoj spletnih aplikacij

Brisanje podatkov - DELETE

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 FROM določa tabelo, iz katere brišemo zapise.
  • WHERE določa pogoj za izbiro vrstic, ki bodo izbrisane.
  • Če pogoj WHERE manjka, se izbrišejo vse vrstice v tabeli.
  • Stavek DELETE ne izbriše zgradbe tabele.
  • Za brisanje celotne tabele kot objekta uporabimo DROP TABLE, ne DELETE.

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 ... WHERE uporabimo, kadar želimo izbrisati samo določene vrstice,
  • DELETE brez WHERE izbriše vse vrstice, vendar je še vedno zapisan kot ukaz za brisanje vrstic,
  • TRUNCATE TABLE uporabimo, 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 DELETE vedno preveri pogoj z ukazom SELECT.
  • Za brisanje posameznega zapisa uporabi glavni ključ ali drug enoličen stolpec.
  • Pri brisanju več zapisov preveri, koliko vrstic ustreza pogoju.
  • Ukaza DELETE brez WHERE ne uporabljaj, razen če želiš izbrisati vse zapise.
  • Pred brisanjem pomembnih podatkov naredi varnostno kopijo.
  • Razlikuj med DELETE, TRUNCATE TABLE in DROP TABLE.

Pogoste napake

  • Manjkajoč pogoj WHERE pri ukazu DELETE.
  • 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 TABLE in DROP 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.