SQL - vkládáme, měníme a mažeme data!

V předchozích dílech našeho seriálu jsme se zajímali pouze o to, jak data z tabulek získat. Menším tajemstvím pro nás zůstávalo, kde se tam vlastně vzala. Dnes si tedy ukážeme, jak data do tabulek vložit, jak je změnit a smazat.
V předchozích dílech našeho seriálu jsme se zajímali pouze o to, jak data z tabulek získat. Menším tajemstvím pro nás zůstávalo, kde se tam vlastně vzala. Dnes si tedy ukážeme, jak data do tabulek vložit, jak je změnit a smazat.

Zmíněné tři operace mají v SQL ekvivalent v příkazech INSERT, UPDATE a DELETE. Zjednodušená syntaxe prvního z nich má následující tvar:

INSERT INTO jméno_tabulky
[(položky)]
VALUES
(hodnoty)

Příkazu lze, ostatně jako v SQL u každého, použít v několika variantách. První možností je vynechat seznam položek, které chceme do tabulky vkládat. V takovém případě musíme ovšem zajistit, aby za klauzulí VALUES následovaly hodnoty všech položek ve stejném pořadí, jak jsou v tabulce nadefinovány. Příkaz

INSERT INTO osoby
VALUES (`Petra`,`Nováčková`,`585522/8789`,`11.5.1988`)
založí do nám dobře známé tabulky osoby záznam pro Petru Nováčkovou. Tabulka osoby pak bude obsahovat následující řádky (zde byl nový záznam přidán na konec, fyzické umístění však závisí na konkrétním systému):
jméno příjmení rodné_číslo datum
Karel Smolný 580815/8777 3.12.1992
Marek Jurda 650404/8956 2.11.1992
Martin Pavlásek 720303/5511 28.3.1990
Pavel Jirásek 551212/7877 26.3.1989
Pavla Nováková 785308/4569 28.6.1997
Pavla Nováková 555111/3042 28.5.1990
Romana Bourková 745226/8820 3.5.1995
Petra Nováčková 585522/8785 11.5.1988

Ještě jednou si všimněme, že pořadí hodnot za klauzulí VALUES je shodné s pořadím definicí položek v tabulce. Tento požadavek je pochopitelný - systém se musí rozhodnout, která hodnota patří jaké položce. Zapíšeme-li tento příkaz ve tvaru

INSERT INTO osoby
VALUES (`Nováčková`,`Petra`,`585522/8789`,`11.5.1988`)
tak sice systém nenahlásí žádnou chybu, ale bude přehozen význam položek jméno a příjmení. Může ovšem nastat situace, kdy se pokusíme vložit například řetězec znaků do položky nadefinované jako číselné - další chování pak záleží na vlastním systému. Může (a s největší pravděpodobností se o to pokusí) provést automatickou konverzi. Pokud se nezdaří, provádění příkazu skončí s chybou (nekompatibilita typů). Příkaz INSERT zapsaný v tomto tvaru má ještě jednu podstatnou nevýhodu - musíme zadat hodnoty pro všechny položky. Ve většině reálných případů (vkládání záznamů do tabulky) však tento požadavek splněn není. Proto máme možnost příkazu INSERT říci, které položky chceme při vkládání záznamu hodnotou naplnit (zbylé jsou zpravidla naplněny tzv. NULL (případně DEFAULT) hodnotou - k bližšímu popisu NULL a DEFAULT se vrátíme v některém z příštích dílů).
INSERT INTO osoby
(jméno,příjmení)
VALUES (`Petra`,`Nováčková`)
Podmínkou opět je, aby hodnoty za klauzulí VALUES odpovídaly vybraným položkám. Podotýkám, že tuto variantu s vyjmenovanými položkami je vhodnější používat vždy - nenastanou problémy s již existujícím SQL kódem, pokud dojde ke změně v definici tabulky (přesněji pouze k přehození pořadí položek či přidání dalších - při odebrání položky, která je v INSERTu použita, musíme příkaz upravit).

Nyní již víme, jak si můžeme do tabulky data vložit. Co máme ale udělat, když musíme některý záznam v tabulce změnit? Ukažme si, jak se tento požadavek v SQL řeší pomocí příkazu UPDATE. Syntaxe tohoto příkazu má následující podobu:

UPDATE jméno_tabulky
SET položka=hodnota [,položka=hodnota] …
WHERE podmínka
Obdobně jako u příkazu INSERT je nutné pamatovat na typovou kompatibilitu. Podmínka za klauzulí WHERE se řídí stejnými pravidly jako u příkazu SELECT. Chceme-li například změnit datum nástupu do zaměstnání u Marka Jurdy a Martina Pavláska, může mít UPDATE tento tvar:
UPDATE osoby
SET datum=`23.6.1990`
WHERE rodné_číslo IN (`650404/8956`,`720303/5511`)
Podmínka mohla mít i jiný tvar, například omezení na jméno a příjmení, případně (vzhledem k jedinečnosti) na datum nástupu. Příkaz UPDATE umožňuje jedním krokem změnit více položek - stačí použít oddělovač (zpravidla čárku). Následující příklad ukazuje, jak vyřešit přejmenování osoby s vybraným rodným číslem.
UPDATE osoby
SET jméno=`Martin`, příjmení=`Nováček`
WHERE rodné_číslo=`650404/8956`
Připomínám, že na místě hodnot (i v případě příkazu INSERT) mohou být nejen konkrétní data, ale také funkce či dokonce tzv. poddotazy (tvořené příkazem SELECT). K této pokročilé technice se ještě vrátíme v některém z příštích pokračování.

Posledním příkazem, který nám dnes zbývá, je DELETE. Jak jeho název napovídá, slouží k výmazu záznamů z tabulky. Odstraněn je vždy celý záznam (či skupina záznam. - záleží na podmínce). Zrušení sloupce spadá do oblasti příkazů skupiny DDL (Data Definition Language). Syntaxe je nejjednodušší z dnes probíraných příkazů a má následující tvar

DELETE [FROM] jméno_tabulky
WHERE podmínka
Klauzule FROM předcházející jméno tabulky není nutná (v některých implementacích tomu může být jinak), podmínka za WHERE podléhá stejným pravidlům jako v předchozích příkazech. Pokud se rozhodneme z naší ukázkové tabulky smazat všechny osoby, které do firmy nastoupili před 1. lednem roku 1990, příkaz DELETE bude vypadat takto
DELETE FROM osoby
WHERE datum<`1.1.1990`
Některé systémy mají mazání realizováno tak, že záznam se sice smaže (někdy ani to nemusí být pravda - označí se pouze za zrušený), ale obsazené místo se neuvolní k novému použití. Důvod je prostý - snaha co nejvíce snížit režii systému na čas potřebný k provedení příkazu.

Závěrem dnešního dílu si uveďme způsob změny dat, který se někdy v praxi používá z důvodu větší rychlosti (problematika výkonnosti a optimalizace dotazů je složitou oblastí a bude ji věnován některý z příštích dílů). Pokud chceme updatovat větší množství položek v záznamu, vyplatí se (připomínám, že "tato pravda" je závislá na konkrétním systému) záznam nejprve smazat a poté vytvořit nový s již aktuálními hodnotami.

V této chvíli již známe základní příkazy jazyka SQL pro manipulaci s daty. Příště se podíváme, jak si můžeme tabulku založit (případně změnit její definici) a vysvětlíme si, jak se v SQL pracuje s indexy.

Předchozí díly
SQL - co jsou to ty agregace?

Nevíte si s SQL rady? Zeptejte se!

2. díl o SQL - začínáme s příkazem Select

Víte, co je SQL? Ne? Nevadí - dnes začínáme!

Váš názor Další článek: TweakUI – co všechno dovede s myší (III.)

Témata článku: Software, Programování, Složité pravidlo, SQL, Syntax, Položka, Update, Petr, Select, Zjednodušený příklad

Určitě si přečtěte


Aktuální číslo časopisu Computer

Zachraňte nefunkční Windows

Jak nakupovat a prodávat kryptoměny

Otestovali jsme konvertibilní notebooky

Velký test 14 herních myší