SQL - update, insert, delete
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