SQL - update, insert, delete: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
d
 
(Jedna medziľahlá úprava od rovnakého používateľa nie je zobrazená.)
Riadok 1: Riadok 1:
 
{{Skripta_dbs}}
 
{{Skripta_dbs}}
Medzi ďalšie príkazy zo skupiny DML patria aj UPDATE, INSERT a DELETE. Sú to príkazy na modifikáciu, vkladanie a mazanie údajov z tabuliek. V tjeto časti budeme pracovať s databázou WORLD.
+
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==
 
==INSERT==
Riadok 23: Riadok 23:
 
kde:
 
kde:
 
* LOW_PRIORITY  - vloženie údajov sa vykoná až keď k tabuľke nebudú pripojení žiadni iní používatelia.
 
* 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 <ref name="se">Storage engines - http://dev.mysql.com/doc/refman/5.5/en/storage-engines.html</ref>..
+
* 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 <ref name="se">Storage engines - http://dev.mysql.com/doc/refman/5.5/en/storage-engines.html</ref>.
* 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<ref>insert delayed http://dev.mysql.com/doc/refman/5.5/en/insert-delayed.html</ref>. Oneskorené vloženie funguje len s úložnými systémami MyISAM, MEMORY, ARCHIVE, a BLACKHOLE<ref name="se"></ref>.
+
* 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<ref>insert delayed http://dev.mysql.com/doc/refman/5.5/en/insert-delayed.html</ref>. 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
+
* 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.
+
'''Úloha:''' Do tabuľky ''city'' vložte údaje o meste Trenčín.
  
 
Riešenie:
 
Riešenie:
  
 
Vkladané údaje budú nasledovné:
 
Vkladané údaje budú nasledovné:
*Názov:Trenčín
+
*Názov: Trenčín,
*Kód krajiny:SVK
+
*Kód krajiny: SVK,
*Kraj:Trenčiansky
+
*Kraj: Trenčiansky,
*Počet obyvateľov: 56 215 <ref>Trenčín - http://www.trencin.sk/16804</ref>
+
*Počet obyvateľov: 56 215 <ref>Trenčín - http://www.trencin.sk/16804</ref>.
  
 +
 +
Riešenie:
 
<source lang="sql">
 
<source lang="sql">
 
   INSERT INTO city (name, CountryCode, District, Population)
 
   INSERT INTO city (name, CountryCode, District, Population)
Riadok 43: Riadok 45:
 
</source>
 
</source>
  
Riešnie 2-hým spôsobom:
+
Riešnie druhým spôsobom:
 
<source lang="sql">
 
<source lang="sql">
 
   INSERT INTO city  
 
   INSERT INTO city  
Riadok 55: Riadok 57:
 
   VALUES ("Kocúrkovo","SVK","Kocúrkovský",3)
 
   VALUES ("Kocúrkovo","SVK","Kocúrkovský",3)
 
</source>
 
</source>
 +
  
 
Poznámka: pri vkladaní neuvádzame atribút ID, pretože ten má vlastnosť ''auto_increment''.
 
Poznámka: pri vkladaní neuvádzame atribút ID, pretože ten má vlastnosť ''auto_increment''.
Tabuľka city po vložení nových miest (sú vypísané len slovenské mestá)
 
  
[[Súbor:sql insert1.png|center|framed|Výpis slovenských miest po vložení nových údajov do tabuľky city]]
+
Na nasledujúcom obrázku je tabuľka ''city'' po vložení nových miest (sú vypísané len slovenské mestá).
 +
 
 +
[[Súbor:sql insert1.png|center|framed|Výpis slovenských miest po vložení nových údajov do tabuľky ''city'']]
  
 
==UPDATE==
 
==UPDATE==
Príkaz UPDATE slúži na aktuálizáciu údajov v tabuľke. Kompletná syntax príkazu UPDATE je nasledovná<ref>update (mysql) http://dev.mysql.com/doc/refman/5.5/en/update.html</ref>:
+
Príkaz UPDATE slúži na aktualizáciu údajov v tabuľke. Kompletná syntax príkazu UPDATE je nasledovná<ref>update (mysql) http://dev.mysql.com/doc/refman/5.5/en/update.html</ref>:
 
<source lang="sql">
 
<source lang="sql">
 
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
 
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
Riadok 70: Riadok 74:
 
</source>
 
</source>
 
kde:
 
kde:
*table_reference - názov tabuľky, ktorej údaje chceme modifikovať
+
*table_reference - názov tabuľky, ktorej údaje chceme modifikovať,
*where_condition - obmedzenie množiny údajov, ktoré chceme modifikovať  
+
*where_condition - obmedzenie množiny údajov, ktoré chceme modifikovať .
 
Nepovinné časti príkazu UPDATE
 
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.
 
*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.
Riadok 86: Riadok 90:
  
  
'''Ú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 obytateľov o 1000.
+
'''Ú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:
 
Riešenie:
Riadok 130: Riadok 134:
 
     [ORDER BY ...]
 
     [ORDER BY ...]
 
</source>
 
</source>
alebo v prípade, že chceme zmazať viacero tabuliek naraz:
+
alebo v prípade, že chceme zmazať údaje z viacerých tabuliek naraz:
 
<source lang="sql">
 
<source lang="sql">
 
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
 
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
Riadok 138: Riadok 142:
 
</source>
 
</source>
 
kde:
 
kde:
* LOW_PRIORITY a IGNORE majú rovanký význam ako v predchádzajúcich prípadoch.
+
* 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.
 
* 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.
 
* ORDER BY - pri mazaní viacerých údajov sa určí poradie mazania údajov.
 
  
  
Riadok 149: Riadok 152:
 
   WHERE name LIKE "Kocúrkovo"
 
   WHERE name LIKE "Kocúrkovo"
 
</source>
 
</source>
 +
 +
Upozornie: Pozor, pri zápise ''DELETE FROM city'' sa zmažú všetky záznamy z tabuľky ''city''!
 
==Zdroje a odkazy==
 
==Zdroje a odkazy==
 
<references/>
 
<references/>

Aktuálna revízia z 22:48, 17. január 2011

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