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

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 2: Riadok 2:
 
{{Draft}}
 
{{Draft}}
 
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 ď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<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]]
  
 
==UPDATE==
 
==UPDATE==
Riadok 18: Riadok 77:
 
*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 86:
  
  
'''Ú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 obytateľov o 1000.
  
 
Riešenie:
 
Riešenie:
Riadok 62: Riadok 123:
 
|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 139: Riadok 142:
 
* 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.
 +
  
  

Verzia zo dňa a času 23:15, 7. november 2010

Imbox draft.png
Toto je projekt, na ktorom sa ešte stále pracuje!!

Aj keď sú v tomto dokumente použiteľné informácie, ešte nie je dokončený. Svoje návrhy môžete vyjadriť v diskusii o tejto stránke.

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á[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[2].
  • 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]
  INSERT INTO city (name, CountryCode, District, Population)
  VALUES ("Trenčín","SVK","Trenčiansky",56215)

Riešnie 2-hý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. Tabuľka city po vložení nových miest (sú vypísané len slovenské mestá)

Sql insert1.png

UPDATE

Príkaz UPDATE slúži na aktuálizá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 obytateľ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ť viacero tabuliek naraz:

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

kde:

  • LOW_PRIORITY a IGNORE majú rovanký 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"

Zdroje a odkazy