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

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
 
(4 medziľahlé úpravy od rovnakého používateľa nie sú zobrazené.)
Riadok 1: Riadok 1:
 
{{Skripta_dbs}}
 
{{Skripta_dbs}}
{{Draft}}
+
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''.
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.
+
 
 +
==INSERT==
 +
Príkaz INSERT slúži na vkladanie údajov do tabuľky. Kompletná syntax príkazu INSERT je nasledovná<ref>insert (mysql) http://dev.mysql.com/doc/refman/5.5/en/insert.html</ref>:
 +
<source lang="sql">
 +
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
 +
    [INTO] tbl_name [(col_name,...)]
 +
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
 +
</source>
 +
alebo
 +
<source lang="sql">
 +
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
 +
    [INTO] tbl_name
 +
    SET col_name={expr | DEFAULT}, ...
 +
</source>
 +
alebo
 +
<source lang="sql">
 +
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
 +
    [INTO] tbl_name [(col_name,...)]
 +
    SELECT ...
 +
</source>
 +
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 <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.
 +
* 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 <ref>Trenčín - http://www.trencin.sk/16804</ref>.
 +
 
 +
 
 +
Riešenie:
 +
<source lang="sql">
 +
  INSERT INTO city (name, CountryCode, District, Population)
 +
  VALUES ("Trenčín","SVK","Trenčiansky",56215)
 +
</source>
 +
 
 +
Riešnie druhým spôsobom:
 +
<source lang="sql">
 +
  INSERT INTO city
 +
  SET name="Prievidza", CountryCode="SVK",
 +
      District="Trenčiansky", Population=52070
 +
</source>
 +
 
 +
Vložme do tabuľky city ešte jeden (chybný) údaj, ktorý budeme v nasledujúcom príklade mazať:
 +
<source lang="sql">
 +
  INSERT INTO city (name, CountryCode, District, Population)
 +
  VALUES ("Kocúrkovo","SVK","Kocúrkovský",3)
 +
</source>
 +
 
 +
 
 +
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á).
 +
 
 +
[[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 12: 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.
 
*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.
 
*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 1.1:''' V tabuľke city aktualizujte počet obyvateľov Bratislavy podľa aktuálneho stavu<ref>Bratislava - počet obyvateľov: http://www.bratislava.sk/vismo/dokumenty2.asp?id_org=700000&id=78458&p1=97431</ref>. Aktuálny počet obyvateľov k 31. decembru 2009 je 431 061.
+
 
 +
'''Úloha:''' V tabuľke city aktualizujte počet obyvateľov Bratislavy podľa aktuálneho stavu<ref>Bratislava - počet obyvateľov: http://www.bratislava.sk/vismo/dokumenty2.asp?id_org=700000&id=78458&p1=97431</ref>. Aktuálny počet obyvateľov k 31. decembru 2009 je 431 061.
  
 
Riešenie:
 
Riešenie:
Riadok 26: Riadok 89:
  
  
'''Úloha 1.2:''' 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 62: Riadok 126:
 
|3209 || Bratislava || SVK || Bratislava ||432061
 
|3209 || Bratislava || SVK || Bratislava ||432061
 
|}
 
|}
 
==INSERT==
 
Príkaz INSERT slúži na vkladanie údajov do tabuľky. Kompletná syntax príkazu INSERT je nasledovná<ref>insert (mysql) http://dev.mysql.com/doc/refman/5.5/en/insert.html</ref>:
 
<source lang="sql">
 
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
 
    [INTO] tbl_name [(col_name,...)]
 
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
 
</source>
 
alebo
 
<source lang="sql">
 
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
 
    [INTO] tbl_name
 
    SET col_name={expr | DEFAULT}, ...
 
</source>
 
alebo
 
<source lang="sql">
 
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
 
    [INTO] tbl_name [(col_name,...)]
 
    SELECT ...
 
</source>
 
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 <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>.
 
* 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 <ref>Trenčín - http://www.trencin.sk/16804</ref>
 
 
<source lang="sql">
 
  INSERT INTO city (name, CountryCode, District, Population)
 
  VALUES ("Trenčín","SVK","Trenčiansky",56215)
 
</source>
 
 
Riešnie 2-hým spôsobom:
 
<source lang="sql">
 
  INSERT INTO city
 
  SET name="Prievidza", CountryCode="SVK",
 
      District="Trenčiansky", Population=52070
 
</source>
 
 
Vložme do tabuľky city ešte jeden (chybný) údaj, ktorý budeme v nasledujúcom príklade mazať:
 
<source lang="sql">
 
  INSERT INTO city (name, CountryCode, District, Population)
 
  VALUES ("Kocúrkovo","SVK","Kocúrkovský",3)
 
</source>
 
 
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]]
 
  
 
==DELETE==
 
==DELETE==
Riadok 128: 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 136: 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 146: 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