SQL - update, insert, delete: Rozdiel medzi revíziami
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 | + | |
+ | '''Ú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 | + | |
+ | '''Ú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 | ||
|} | |} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==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
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á)
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:
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"
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
- ↑ insert (mysql) http://dev.mysql.com/doc/refman/5.5/en/insert.html
- ↑ 2,0 2,1 Storage engines - http://dev.mysql.com/doc/refman/5.5/en/storage-engines.html
- ↑ insert delayed http://dev.mysql.com/doc/refman/5.5/en/insert-delayed.html
- ↑ Trenčín - http://www.trencin.sk/16804
- ↑ update (mysql) http://dev.mysql.com/doc/refman/5.5/en/update.html
- ↑ Bratislava - počet obyvateľov: http://www.bratislava.sk/vismo/dokumenty2.asp?id_org=700000&id=78458&p1=97431
- ↑ delete(mysql) http://dev.mysql.com/doc/refman/5.5/en/delete.html