SQL - update, insert, delete

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání

Medzi príkazy zo skupiny DML patria UPDATE, INSERT a DELETE. Sú to príkazy na modifikáciu, vkladanie a mazanie údajov z tabuliek. V tejto časti budeme pracovať s databázou world.

INSERT

Príkaz INSERT slúži na vkladanie údajov do tabuľky. Kompletná syntax príkazu INSERT je nasledovná[1]:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...

alebo

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    SET col_name={expr | DEFAULT}, ...

alebo

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...

kde:

  • LOW_PRIORITY - vloženie údajov sa vykoná až keď k tabuľke nebudú pripojení žiadni iní používatelia.
  • HIGH_PRIORITY - v prípade, že má server nastavené vkladanie údajov v nízkej priorite (LOW_PRIORITY) je toto nastavenie zrušené. Špecifikátory LOW_PRIORITY a HIGH_PRIORITY sa dajú použiť len pri úložných systémoch MyISAM, MEMORY, a MERGE [2].
  • DELAYED - pri vkladaní sa nečaká na odpoveď servera. Požiadavky na vloženie údajov sú poslané do fronty, ktorá sa priebežne spracováva[3]. Oneskorené vloženie funguje len s úložnými systémami MyISAM, MEMORY, ARCHIVE, a BLACKHOLE.
  • IGNORE - pri vkladaní viacerých záznamov v jednej dávke sa pri výskyte chyby pokračuje ďalším vložením namiesto ukončenia dávky a vrátenia chyby.


Úloha: Do tabuľky city vložte údaje o meste Trenčín.

Riešenie:

Vkladané údaje budú nasledovné:

  • Názov: Trenčín,
  • Kód krajiny: SVK,
  • Kraj: Trenčiansky,
  • Počet obyvateľov: 56 215 [4].


Riešenie:

  INSERT INTO city (name, CountryCode, District, Population)
  VALUES ("Trenčín","SVK","Trenčiansky",56215)

Riešnie druhým spôsobom:

  INSERT INTO city 
  SET name="Prievidza", CountryCode="SVK",
      District="Trenčiansky", Population=52070

Vložme do tabuľky city ešte jeden (chybný) údaj, ktorý budeme v nasledujúcom príklade mazať:

  INSERT INTO city (name, CountryCode, District, Population)
  VALUES ("Kocúrkovo","SVK","Kocúrkovský",3)


Poznámka: pri vkladaní neuvádzame atribút ID, pretože ten má vlastnosť auto_increment.

Na nasledujúcom obrázku je tabuľka city po vložení nových miest (sú vypísané len slovenské mestá).

Výpis slovenských miest po vložení nových údajov do tabuľky city

UPDATE

Príkaz UPDATE slúži na aktualizáciu údajov v tabuľke. Kompletná syntax príkazu UPDATE je nasledovná[5]:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
    [WHERE where_condition]
    [ORDER BY ...]

kde:

  • table_reference - názov tabuľky, ktorej údaje chceme modifikovať,
  • where_condition - obmedzenie množiny údajov, ktoré chceme modifikovať .

Nepovinné časti príkazu UPDATE

  • LOW_PRIORITY - modifikácia sa vykoná len v prípade, ak s tabuľkou nepracujú iní používatelia. Tento mechanizmus je zabezpečený pomocou zamykania na nízkej úrovni.
  • IGNORE - pri modifikácii viacerých údajov sa môže stať, že pri niektorom kroku nastane chyba. V štandardnom nastavení sa operácia zruší. So špecifikátorom IGNORE na pokračuje ďalej s ďalšou zmenou.


Úloha: V tabuľke city aktualizujte počet obyvateľov Bratislavy podľa aktuálneho stavu[6]. Aktuálny počet obyvateľov k 31. decembru 2009 je 431 061.

Riešenie:

   UPDATE city SET Population=431061 WHERE name LIKE "Bratislava"


Úloha: V tabuľke city aktualizujte počet obyvateľov všetkých slovenských miest. Vo všetkých mestách zvýšte počet obyvateľov o 1000.

Riešenie:

Počet obyvateľov v slovenských mestách pred aktualizáciou.
ID Name CountryCode District Population
3210 Košice SVK Východné Slovensko 241874
3211 Prešov SVK Východné Slovensko 93977
3209 Bratislava SVK Bratislava 431061
   UPDATE city SET Population=Population+1000 WHERE CountryCode="SVK"
Počet obyvateľov v slovenských mestách po aktualizácii.
ID Name CountryCode District Population
3210 Košice SVK Východné Slovensko 242874
3211 Prešov SVK Východné Slovensko 94977
3209 Bratislava SVK Bratislava 432061

DELETE

Príkaz DELETE slúži na mazanie údajov z tabuliek. Kompletná syntax príkazu DELETE je nasledovná[7]:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
    [WHERE where_condition]
    [ORDER BY ...]

alebo v prípade, že chceme zmazať údaje z viacerých tabuliek naraz:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

kde:

  • LOW_PRIORITY a IGNORE majú rovnaký význam ako v predchádzajúcich prípadoch.
  • QUICK - dá sa použiť len pre MyISAM tabuľky, kde pri mazaní sa ihneď neprepočítajú indexové stĺpce. Týmto sa zrýchli mazanie údajov.
  • ORDER BY - pri mazaní viacerých údajov sa určí poradie mazania údajov.


Úloha: Z tabuľky city zmažte mesto Kocúrkovo

  DELETE FROM city
  WHERE name LIKE "Kocúrkovo"

Upozornie: Pozor, pri zápise DELETE FROM city sa zmažú všetky záznamy z tabuľky city!

Zdroje a odkazy