Úprava záznamu (riadku) v tabuľke

Dáta sa ako všade inde tak aj v databáze neustále upravujú. Je nutné pridávať (INSERT INTO) nové záznamy, ktoré sa následne niekedy úplne mažú (nenávratne odstraňujú z databázy) a v ostatnom prípade sa neobmedzene veľakrát upravujú. Na to, aby sme mohli v databáze nejaký riadok/riadky vymazať alebo upraviť, je nutné, aby obsahovali nejaký unikátny identifikátor. Ak chceme vymazať/upraviť nejaký riadok, musíme nejako povedať databáze vymaž práve ten riadok, ktorý obsahuje v danom stĺpci niečo konkrétne. Špecifikácia riadka pre mazanie/upravovanie sa vykonáva pomocou klauzuly WHERE, takže v podmienke musí byť jedna z hodnôt nejakého stĺpca.

 

Ak by sme mali v našej tabuľke napríklad dva riadky s rovnakými dátami (id, meno a priezvisko), ako by sme podmienkou WHERE povedali, ktorý konkrétne chceme vymazať? Pri vykonávaní príkazov v SQL sa neberie do úvahy nejaké virtuálne (vizuálne) poradové číslo záznamu v tabuľke, berú sa do úvahy len zadané hodnoty v záznamoch. Preto je vo zvyku zadávať najmenej jeden stĺpec, ktorý určuje unikátny identifiktár (id) riadka, v našom prípade to je stĺpec id. Druhou dôležitou vecou je zabezpečiť, aby žiadne dva záznamy nemali tú istú hodnotu v takomto stĺpci. Nateraz to robíme a sledujeme si to manuálne, neskôr to však docielime jednoduchšie...

 

Odstránenie riadka z databázy je možné vykonať pomocou príkazu DELETE FROM (vymazať), za ktorým nasleduje štandardne názov tabuľky, z ktorej budeme mazať. Následne sa zadáva klauzula WHERE s klasickou podmienkou ako pri SELECTe (názov stĺpca + operátor + hodnota), ktorý vyfiltruje riadok, ktorý chceme mazať. Skúsime si na ukážku vymazať z našej tabuľky posledný záznam, ktorý nesie id číslo 5. Náš príkaz by mal vyzerať takto:


DELETE FROM users WHERE id = 5;


Po vykonaní príkazu dostanete úspešnú hlášku s uvedeným počtom riadkov, ktoré boli vymazané. Ak zadáte príkaz SELECT * alebo sa len prepnete vizuálne v adminovi (phpMyAdmin) na sekciu browse, uvidíte, že záznam sa už skutočne v tabuľke nenachádza. Ak teraz spustíte znova ten istý príkaz, nie je to zle, nedostaneme error. Iba dostaneme hlášku, že žiadny záznam nebol vymazaný, pretože filter zadaný v klauzule WHERE nenašiel žiadny záznam, ktorý by tomu vyhovoval, takže chybu sme nevykonali.

 

Keďže vieme zadať podmienku, ktorú by spĺňalo viacej riadkov, napríklad WHERE id > 3, je možné pomocou tohto príkazu vymazať aj viacero riadkov naraz. Keďže vykonanie tohto príkazu maže nenávratne dáta, je dôležité byť veľmi opatrný s týmto príkazom a najmä s tvorením podmienky. V praxi sa namiesto mazania sem tam využívajú iné bezpečnejšie praktiky, ale k tomu sa dostaneme neskôr...

 

Tu sa patrí upozorniť ešte na veľmi dôležitú vec. Ak náhodou vykonáte príkaz DELETE FROM bez podmienky, podmienka sa bude automaticky považovať za splnenú. Tým pádom spĺňajú podmienku všetky riadky a tak budú týmto príkazom všetky záznamy nenávratne vymazané, takže pozor na to.

 

Upravovať existujúce záznamy v tabuľke vieme pomocou príkazu UPDATE (aktualizovať), za ktorým nasleduje názov tabuľky, v ktorej chceme upraviť záznam alebo viacero záznamov naraz. Ďalej nasleduje slovo SET (nastaviť), za ktorým definujeme postupne výrazy (priradenia), ktoré sa majú vykonať oddelené čiarkou. Na konci je klauzula WHERE, ktorá rovnako ako pri príkaze DELETE vymedzuje riadky, ktoré chceme meniť, resp. na ktoré chceme alikovať vzťahy zadané za slovom set. Taký vzťah vyzerá podobne ako priradenie hodnoty do premennej v jazyku PHP, len v tomto prípade priraďujeme do stĺpca. Je tvorený zadefinovaním názvu stĺpca, za ktorým nasleduje znamienko rovná sa (=), za ktorým nasleduje hodnota, na ktorú chceme nastaviť hodnotu v danom stĺpci na daných riadkoch. Takto môžeme zmeniť iba jednu hodnotu, čiže iba hodnotu jedného stĺpca, ale kľudne môžeme naraz nastaviť (zmeniť) hodnoty viacerých stĺpcov naraz, stačí len zadať viac priradení oddelených čiarkov. Skúsime si nášmu aktuálne poslednému záznamu zmeniť hodnotu v stĺpci user_surname, malo by to vyzerať takto:


UPDATE users
SET user_surname='Paco'
WHERE id=4;


Query na zmenu dvoch údajov by mohla vyzerať takto:


UPDATE users
SET user_name='Laco',user_surname='Paco'
WHERE id=4;


Tento príkaz si môžete ľubovoľne vyskúšať, pretože nám nič nezmení a nespôsobí ani žiadny error. Podobne by sme tam mohli zadať id=30. Keďže taký záznam nemáme (filter s WHERE podmienkou nič nenašiel), nič nebude zmenené. Aj tu je dobré upozorniť, že ak vykonáme tento príkaz bez klauzuly WHERE, zmena (SET) sa aplikuje na všetky riadky v tabuľke. Predchádzajúce dáta budú samozrejme po zmene nenávratne stratené!

Máte nejakú otázku alebo Vám niečo nie je jasné? Napíšte nám na info@zacni-programovat.sk a poradíme!

Ťažko sa vám učí samému?

Máte problémy s niektorými časťami alebo sa neviete učiť sám? Využite našu možnosť individuálnej asistencie:

  • samostatný prístup
  • vysvetlenie nejasností prebraného učiva
  • úlohy a cvičenia navyše
  • všetko z pohodlia domova cez mail a skype

Pre viac info kliknite tu

Kľúčové slová prednášky

sql update fromsql updateuprava zaznamu v tabulkedeletedelete wherevymazanie riadka v tabulkesql delete

IT ftip

Jeden mladý muž hovoril: - Chcem byť veľkým spisovateľom. Pýtali sa ho: - A čo pre teba znamená veľký? Odpovedal: - To znamená, že chcem písať niečo, čo bude čítať celý svet, niečo, čo prinúti ľudí jednať emocionálne, niečo, čo ich prinúti jačať, kričať, šalieť a revať od zlosti, zúfalstva a bolesti! A teraz pracuje pre Microsoft a píše chybové hlášky.