PHP - 31. díl – SQL příkaz UPDATE

Dnešní díl bude věnován poslednímu ze čtyř základních příkazů pro práci s SQL příkazy, a to příkazu UPDATE. Samotný příkaz UPDATE slouží ke změně dat v databázových tabulkách.

SQL příkaz UPDATE

SQL příkaz UPDATE slouží ke změně už existujících dat v databázi. Samotný příkaz UPDATE není příliš složitý a ve své nejjednodušší formě vypadá takto:

UPDATE tabulka SET sloupec_1=hodnota_1,...

Nejjednodušší příklad změní hodnoty sloupců ve všech řádcích tabulky na stejnou hodnotu. Takovým příkladem může například být nastavení všech osob na stejné telefonní číslo:

UPDATE Osoby SET Telefon = `123456789`

Samotné nastavování určitého sloupce na stejnou hodnotu ve všech řádkách je málo užitečné, a proto se později seznámíme s dalšími klauzulemi, které umožňují lépe cílit změny. Pomocí příkazu UPDATE je možné nastavovat současně více sloupců. Například v následujícím příkladě nastavíme všem osobám stejný telefon a stejnou adresu:

UPDATE Osoby SET Adresa = `Provaznická 1`, Telefon = `123456789`

Takto tedy můžeme pomocí příkazu UPDATE nastavit třeba všechny sloupce naráz. Pomocí jednoduchého příkazu bez dalších klauzulí nastavujeme údaje ve všech řádcích. Proto v dalším textu ukážu, jak je možné nastavovat údaje jen v některých řádcích. Jak už jsem předeslal, příkaz UPDATE ve svém nejjednodušším tvaru je poměrně málo užitečný, a proto existuje složitější varianta příkazu:

UPDATE tabulka SET sloupec1=hodnota1,… WHERE podmínka LIMIT limit_počtu_řádků

V dalším textu si rozebereme podrobně jednotlivé části příkazu UPDATE.

Klauzule WHERE v příkazu UPDATE

Klauzule WHERE slouží k zadání podmínky, která určuje, jaké řádky mají být změněny. Tím umožňuje neměnit všechny řádky, ale jenom některé, v krajním případě jenom jeden řádek, a nebo také žádný. Následující příklad změní telefon u jedné osoby s rodným číslem 651209/2344:

UPDATE Osoby SET Telefon = `123456789` WHERE RodneCislo = `651209/2344`

V tomto případě jsme zacílili změnu na jeden řádek, v našem případě na jednu konkrétní osobu. Toto je daleko jemnější způsob, jak měnit data. Při zadávání podmínky se může stát, že podmínce nevyhovuje ani jeden řádek. To se nepovažuje za chybu, ale prostě to dopadne tak, že celý SQL příkaz nic neprovede. Příkladem takové podmínky může být SQL příkaz:

UPDATE Osoby SET Telefon = `123456789` WHERE RodneCislo = `000000`

Takové rodné číslo v tabulce nejspíše neexistuje a tak příkaz UPDATE neudělá vůbec nic, protože nenajde řádek, na který by mohl změnu aplikovat. Přesto, jak už jsem napsal, nepovažuje se to za chybu, ale všechno je naprosto v pořádku. Pro klauzuli WHERE platí všechno, co jsme si řekli ve 29. díle u klauzule WHERE pro příkaz SELECT. Je možné používat i operátor LIKE, například následující příkaz nastaví adresu pro všechny osoby s pražskými telefonními čísly (tedy čísly začínajícími dvojkou):

UPDATE Osoby SET Adresa = `Praha` WHERE Telefon LIKE `2%`

Stejně tak je možné používat i logické spojky AND (= a zároveň), nebo OR (= nebo) pro logické spojení více podmínek najednou:

UPDATE Osoby SET Adresa = `Praha` WHERE Adresa LIKE `%Praha%` OR Telefon LIKE `2%`

Výše uvedený SQL příkaz nastavuje adresu na Praha, když najde buď v adrese slovo Praha, a nebo telefonní číslo bude začínat dvojkou. Tedy pokud něco bude nasvědčovat tomu, že má bydliště v Praze, nastavíme adresu na Praha.

Klauzule LIMIT v příkazu UPDATE

Klauzule LIMIT je další ze způsobů, jak omezit počet měněných řádků pomocí příkazu UPDATE. Pokud se použije klauzule LIMIT, pak bude zaručeno, že nebude změněno více řádků, než je číslo použité za slovem LIMIT:

UPDATE Osoby SET Jmeno = `Pavel Novák` LIMIT 1

Výše uvedený SQL příkaz zajistí, že maximálně jeden řádek bude nastaven na jméno Pavel Novák. Bohužel tento příklad má tu nevýhodu, že nevíme, který řádek konkrétně to bude. Klauzuli LIMIT je možné kombinovat navzájem i s klauzulí WHERE:

UPDATE Osoby SET Adresa = `Praha` WHERE Telefon LIKE `2%` LIMIT 10

Výše uvedený příkaz zajistí, že u osob, u kterých začíná telefonní číslo dvojkou nastaví adresu na Prahu, ale provede to pouze u maximálně 10 řádků. Zase bohužel nelze předem říci, kterých 10 řádků to bude. Klauzule LIMIT patří mezi málo užitečné klauzule v příkazu UPDATE, protože nemůžeme předem určit, které řádky budou do klauzule LIMIT patřit, a které ne. Příslušné řádky se vyberou víceméně náhodně, a proto klauzuli LIMIT použijeme jenom velmi zřídka ve specifických případech.

Diskuze (12) Další článek: Email ve firmách přestává sloužit zábavě

Témata článku: , , , , , , , , , , , , , , , , , , , , , ,