SQL izmena podataka (UPDATE)
Uneti podaci se mogu izmeniti korišćenjem iskaza UPDATE. U ovom upitu se navode polja koja želimo da izmenimo i nove vrednosti koje ubacujemo. Možemo izmeniti sva ili samo neka polja u tabeli.
UPDATE [tabela]
SET polje=vrednost, polje=vrednost...
Vodite računa da zadate vrednosti moraju odgovarati tipovima podataka.
Ako kreiramo UPDATE iskaz na ovakav način, odnosiće se na sve redove tabele. U praksi, gotovo uvek koristimo izmenu podataka za one redove koji zadovoljavaju određeni uslov. Da bismo to postigli, dodajemo klauzulu WHERE, slično kao za SELECT upit.
UPDATE [tabela]
SET polje=vrednost, polje=vrednost...
WHERE uslov
Vrednost polja ne mora da bude samo konstanta već i rezultat MySQL funkcije, kao i izraz u kome učestvuje postojeća vrednost tog ili nekog drugog polja.
Primer
Pogledajmo najpre primer u kome ima smisla navesti UPDATE iskaz bez zadavanja uslova. Recimo da se bavimo prodajom kompjuterske opreme. Imamo tabelu komponente i u njoj podatke o opremi. Primećujemo da imamo nabavnu cenu, ali kada smo unosili podatke nismo znali koja će biti prodajna cena. Trenutno stanje u tabeli je ovakvo:
id | tip | nabavna | prodajna | naziv |
---|---|---|---|---|
MT22 | Monitor | 390 | 0 | Samsung LED 23" |
HD51 | Hard disk | 180 | 0 | WD 4TB |
MM04 | Memorija | 34 | 0 | Kingston DDR3 4GB |
TS08 | Tastatura | 20 | 0 | Genius USB Slim |
MS28 | Miš | 15 | 0 | Logitech USB Optic |
Sada znamo da će se ta cena formirati kada na nabavnu cenu dodamo 20% i tu promenu treba da uradimo za sve podatke u tabeli. Primenićemo ovakav upit:
UPDATE komponente
SET prodajna = nabavna * 1.2
Ovaj primer je specifičan i po tome što nismo zadali neku konkretnu vrednost kao podatak koji se unosi u polje, već smo zadali vrednost kao izraz. Znači da će baza podataka "proći" kroz sve redove tabele (naravno, pošto nismo "filtrirali" redove pomoću WHERE klauzule) i u svakom redu uzeti vrednost iz polja nabavna, pomnožiti je sa 1.2 i tu vrednost ubaciti u polje prodajna. (Kada želimo da izračunamo vrednost uvećanu za 20%, dovoljno je da je pomnožimo sa 1.2).
id | tip | nabavna | prodajna | naziv |
---|---|---|---|---|
MT22 | Monitor | 390 | 468 | Samsung LED 23" |
HD51 | Hard disk | 180 | 216 | WD 4TB |
MM04 | Memorija | 34 | 40.8 | Kingston DDR3 4GB |
TS08 | Tastatura | 20 | 24 | Genius USB Slim |
MS28 | Miš | 15 | 18 | Logitech USB Optic |
Hajde sada da izmenimo par polja u jednom redu tabele:
UPDATE komponente
SET tip='HDD', naziv='WD 4TB/64MB'
WHERE id='HD51'
Ovaj put smo "hirurški precizno" izmenili samo jedan red tabele, pošto smo zadali WHERE klauzulu sa uslovom koji filtrira samo jedan red tabele. Logično, zato što smo zadali vrednost primernog ključa id koji i jeste jedinstven u tabeli.
Zadali smo nove vrednosti za polja tip i naziv, i posle ovog upita situacija je sledeća:
id | tip | nabavna | prodajna | naziv |
---|---|---|---|---|
MT22 | Monitor | 390 | 468 | Samsung LED 23" |
HD51 | HDD | 180 | 216 | WD 4TB/64MB |
MM04 | Memorija | 34 | 40.8 | Kingston DDR3 4GB |
TS08 | Tastatura | 20 | 24 | Genius USB Slim |
MS28 | Miš | 15 | 18 | Logitech USB Optic |