SQL:n UPDATE-lause – tietojen muokkaaminen SQL-kyselyllä
UPDATE lauseen avulla päivitetään tietokannassa olevaa tietoa.
UPDATE taulukko
SET kenttä = uusi arvo
WHERE ehto;
Esimerkki yksittäisen kentän päivittämisestä:
UPDATE asiakkaat SET as_yritys = 'Koulutus- ja konsultointipalvelu KK Mediat'
WHERE as_yritys LIKE 'KK Mediat';
Esimerkki useamman kentän päivittämisestä:
UPDATE asiakkaat SET as_yritys = 'Koulutus- ja konsultointipalvelu KK Mediat',
as_kaupunki = 'Kuopio'
WHERE as_yritys LIKE 'KK Mediat';
Mikäli WHERE ehtoa ei määritellä, päivittää UPDATE kysely kaikki kyseisessä taulussa olevat tietueet.
Tiedon piilottaminen "soft delete"-kyselyllä
Jos päivityksen tavoitteena on poistaa tai piilottaa jokin tietue, puhutaan nk. soft delete-kyselystä. Siinä missä SQL:n DELETE-komentoa hyödyntävä "hard delete"-kysely poistaa tiedon pysyvästi, "soft delete" ainoastaan piilottaa sen:
-- as_nakyva kenttä kontrolloi tietueen näkyvyyttä
UPDATE asiakkaat SET as_nakyva = 0
WHERE as_yritys LIKE 'KK Mediat';
Suoritin virheellisen UPDATE-kyselyn. Kuinka korjaan sen?
SQL-tietokannoissa ja kyselyissä ei ole perinteistä "undo-komentoa". Tästä syystä kaikki tietoa muuttavat SQL-kyselyt pitää suunnitella ja testata huolella. Monimutkaisemmat kyselyt kannattaa ensiksi suorittaa kehitys/testiympäristössä, ja vasta sitten tuotannossa.
Yleisin virhe UPDATE-kyselyiden kohdalla on väärin kohdennettu ehto. Ennen UPDATE-kyselyn suorittamista kannattaa aina testata sama ehto SELECT-kyselyllä ja tarkistaa tulosjoukon, jotta kysely kohdistuu oikeisiin tietueisiin.
Jos kumminkin suoritat UPDATE-kyselyn joka päivittää vääriä rivejä, voit kumota sen vaikutuksen suorittamalla kumoavan update kyselyn. Esimerkiksi:
/* väärin kohdennettu kysely */
UPDATE tuotteet SET hinta = hinta*1.1 WHERE ryhma = 1;
/* korjaava update-kysely */
UPDATE tuotteet SET hinta = hinta - (hinta * 0.1) WHERE ryhma = 1;
Huomaa, että tämänkantainen korjaus voi aiheuttaa pyöristysvirheitä ja ei aina ole turvallinen. Tuotantotietokannoissa kannattaa käyttää lisäksi transaktioita, jolloin virheet voidaan perua turvallisesti.
Toinen yleinen virhetilanne UPDATE-kyselyiden kohdalla on kyselyn kohdentaminen suureen, jopa kymmeniä miljoonia rivejä sisältävään tauluun. 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 UPDATE-kysely joko pienemmissä palasissa - tai hyödyntää väliaikaista taulua datan käsittelyssä.
/* suorita kysely pienemmässä 10,000 kohteen erässä */
UPDATE tuotteet
SET hinta = hinta*1.1
WHERE ryhma = 1
AND id BETWEEN 1 AND 10000;
Muita yleisiä ongelmatilanteita UPDATE-kyselyiden kohdalla ovat muun muassa:
- Pyöristysvirheet
- 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 UPDATE-kyselyiden aikana ovat ehkäistävissä kyselyiden huolellisella suunnittelulla ja testauksella. Näitä taitoja voit opiskella turvallisesti tarjoamissamme SQL-koulutuksissa.