SQL - update, insert, delete: Rozdiel medzi revíziami
(Vytvorená stránka „{{Skripta_dbs}} {{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.…“) |
|||
(5 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 1: | Riadok 1: | ||
{{Skripta_dbs}} | {{Skripta_dbs}} | ||
− | + | 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 | + | |
+ | ==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 | + | 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 | + | |
+ | '''Ú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 | + | |
+ | '''Ú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 63: | Riadok 127: | ||
|} | |} | ||
− | |||
==DELETE== | ==DELETE== | ||
− | + | Príkaz DELETE slúži na mazanie údajov z tabuliek. Kompletná syntax príkazu DELETE je nasledovná<ref>delete(mysql) http://dev.mysql.com/doc/refman/5.5/en/delete.html</ref>: | |
− | < | ||
− | </ | ||
<source lang="sql"> | <source lang="sql"> | ||
+ | DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name | ||
+ | [WHERE where_condition] | ||
+ | [ORDER BY ...] | ||
</source> | </source> | ||
+ | alebo v prípade, že chceme zmazať údaje z viacerých tabuliek naraz: | ||
<source lang="sql"> | <source lang="sql"> | ||
+ | DELETE [LOW_PRIORITY] [QUICK] [IGNORE] | ||
+ | tbl_name[.*] [, tbl_name[.*]] ... | ||
+ | FROM table_references | ||
+ | [WHERE where_condition] | ||
</source> | </source> | ||
+ | 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 | ||
<source lang="sql"> | <source lang="sql"> | ||
+ | DELETE FROM city | ||
+ | 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á).
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:
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ť ú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
- ↑ insert (mysql) http://dev.mysql.com/doc/refman/5.5/en/insert.html
- ↑ 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