SQL:n DELETE-lause ja tietuiden poistaminen tietokannasta
DELETE lauseen avulla poistetaan tietueita tietokannasta:
DELETE FROM taulu
WHERE ehto;
Esimerkki yksittäisen tietueen poistamisesta:
DELETE FROM asiakkaat
WHERE as_ID = 5;
Esimerkki useiden tietueiden poistamisesta
DELETE FROM asiakkaat
WHERE as_ID < 50;
Mikäli koko taulukko halutaan tyhjentää kaikesta tiedosta, onnistuu se jättämällä pois WHERE ehto:
DELETE FROM asiakkaat
DELETE komento on eräs vaarallisimmista SQL-komennoista – käytä sitä harkiten
DELETE komento eroaa muista SQL:n komennoista sikäli, että se poistaa datan taulukosta. Tämä tarkoittaa, että jos DELETE-kysely kohdennetaan väärin, on poistettu tieto palautettava varmuuskopiosta. Tästä syystä kaikki tietoa poistavat SQL-kyselyt pitää suunnitella ja testata huolella. Monimutkaisemmat DELETE-kyselyt kannattaa ensiksi suorittaa kehitys/testiympäristössä, ja vasta sitten tuotannossa.
Yleisin virhe DELETE-kyselyiden kohdalla on väärin kohdennettu ehto. Ennen DELETE-kyselyn suorittamista kannattaa aina testata sama ehto SELECT-kyselyllä ja tarkistaa tulosjoukon, jotta kysely kohdistuu oikeisiin tietueisiin.
Tuotantotietokannoissa kannattaa käyttää lisäksi transaktioita, jolloin virheellisen SQL-kyselyn voi tarvittaessa perua turvallisesti.
Toinen yleinen virhetilanne DELETE-kyselyiden kohdalla on kyselyn kohdentaminen suureen, jopa kymmeniä miljoonia rivejä sisältävään tauluun. Toisin kuin TRUNCATE TABLE-komento, DELETE poistaa tietoa yksi rivi kerrallaan. Huonoimmassa skenaariossa tämä lukitsee kyseisen taulun jopa kymmeniksi minuuteiksi ja aiheuttaa merkittäviä suorituskykyyn liittyviä ongelmia koko tietokantapalvelimme. Tämän kaltaisessa tilanteessa suositeltavinta on suorittaa DELETE-kysely joko pienemmissä palasissa - tai hyödyntää väliaikaista taulua datan käsittelyssä.
Muita yleisiä ongelmatilanteita DELETE-kyselyiden kohdalla ovat muun muassa:
- Viitesääntöjen tai tietotyyppien rajoitusten rikkominen
- NULL-arvojen ja tyhjien arvojen käsittely
- Konfliktoivat kyselyt (nk. race-tilanne, jossa kaksi eri järjestelmää suorittaa päivityksen samaan aikaan, aiheuttaen ristiriitoja)
- Transaktio-login täyttyminen
Nämä ja monet muut ongelmatilanteet DELETE-kyselyiden aikana ovat ehkäistävissä kyselyiden huolellisella suunnittelulla ja testauksella. Näitä taitoja sekä datan palauttamista varmuuskopioista voit opiskella turvallisesti tarjoamissamme SQL-koulutuksissa.