PHP - 30. díl – SQL příkazy INSERT a DELETE

30. díl seriálu o PHP bude věnován představení dvou důležitých SQL příkazů.

Úvod

Dnešní díl bude věnován dvou protikladným SQL příkazům, a to příkazu INSERT na přidávání celých nových řádků a příkazu DELETE na mazání celých řádků.

SQL příkaz INSERT

SQL příkaz INSERT slouží k přidávání nových řádků do databáze. Samotný příkaz INSERT není příliš složitý a patří k těm jednodušším příkazům. Téměř úplná podoba nejběžnější formy příkazu INSERT je následující:

INSERT INTO tabulka (seznam_sloupců) VALUES (seznam_hodnot)

Nejjednodušší možná forma příkazu INSERT je naplnění všech sloupců v tabulce hodnotami přesně v tom pořadí, v jakém jsou sloupce definovány při vytvoření tabulky. Například v tabulce Osoby, kterou jsme používali v předchozích dílech jsou sloupce definovány v pořadí: Jmeno, RodneCislo, Adresa, Telefon. Pak by INSERT příkaz mohl vypadat třeba takto:

INSERT INTO Osoby
VALUES (`Jan Novotný`,`701212/1234`,`Novohradská 5`,`303456789`)

Tento SQL příkaz přidá jeden řádek do tabulky Osoby. V mnoha případech je ale nepraktické předpokládat, že sloupce budou přesně v tom pořadí, v jakém jsou definovány v tabulce. Proto je mnohem lepší, budeme-li do každého příkazu INSERT přidávat seznam sloupců. Například stejný příkaz, jako je výše lze se seznamem sloupců napsat takto:

INSERT INTO Osoby(Jmeno,RodneCislo,Adresa,Telefon)
VALUES (`Jan Novotný`,`701212/1234`,`Novohradská 5`,`303456789`)

Je lepší přidávat seznam sloupců ke každému příkazu INSERT a navíc tím získáme tu výhodu, že nemusíme zadávat všechny sloupce v tabulce, pokud je nechceme všechny vyplnit. Například pokud chceme vyplnit pouze sloupce Jmeno a RodneCislo, můžeme napsat takovýto příkaz:

INSERT INTO Osoby(Jmeno,RodneCislo) VALUES (`Pavel Novák`,`600512/7894`)

Přitom je nutné podotknout, že ne každý sloupec lze vynechat. Některé sloupce musíme povinně vyplnit, například v našem případě musíme vždy vyplnit sloupec s rodným číslem, jinak nám velmi brzy začnou příkazy INSERT selhávat.

Jedním příkazem INSERT lze najednou přidat více řádků. Například pro přidání dvou řádků můžeme použít následující příkaz:

INSERT INTO Osoby(Jmeno,RodneCislo)
VALUES(`Alena Válová`,`555612/7845`),(`Aleš Blamák`,`881102/5621)

Tímto příkazem je možné najednou přidat libovolné množství řádků, stačí prostě hodnoty v závorkách oddělovat čárkou.

SQL příkaz DELETE

Příkaz DELETE slouží k mazání celých řádků z databázových tabulek. Jedná se o poměrně nebezpečný příkaz, kterým můžeme přijít velmi rychle o data.

Nejjednodušší tvar příkazu DELETE slouží k vymazání všech údajů v databázové tabulce. Pokud byste spustili následující příkaz, budete mít tabulku Osoby naprosto čistou bez jakýchkoli dat:

DELETE FROM Osoby

Tento nejjednodušší příkaz DELETE je příliš hrubý pro valnou většinu použití. Málokdy potřebujeme takto rozsáhle ničit data v celých tabulkách. Většinou potřebujeme jemnější způsob, jak mazat řádky v tabulkách. Proto úplná podoba příkazu DELETE je trochu složitější:

DELETE FROM tabulka WHERE podmínka ORDER BY třídící_kritérium LIMIT limit_počtu_řádků

Klauzule WHERE v příkazu DELETE

Pro selektivní mazání řádků je k dispozici klauzule WHERE. Platí o ní to, že pokud je použita, vymažou se jenom ty řádky, které splňují podmínku danou za klauzulí WHERE. O tom, jaké mohou být podmínky za klauzulí WHERE jsem psal ve 29. díle u příkazu SELECT. U příkazu DELETE jsou možnosti podmínek naprosto stejné.

Například tento příkaz vymaže všechny řádky se jménem začínajícím na Pavel:

DELETE FROM Osoby WHERE Jmeno LIKE `Pavel%`

A tento příkaz lze využít ke smazání osob s telefonními čísly začínající na dvojku, tedy majitele pražských telefonních čísel:

DELETE FROM Osoby WHERE Telefon LIKE `2%`

A nakonec ještě třeba jiný typický příklad, jak třeba vymazat osobu s konkrétním rodným číslem:

DELETE FROM Osoby WHERE RodneCislo = `651209/2344`

Pokud se nám podaří v klauzuli WHERE zadat takové podmínky, že se nevymaže žádný řádek, nebere se to za chybu, ale vše proběhne bezchybně.

Klauzule LIMIT v příkazu DELETE

Klauzule LIMIT je jiným způsobem, jak omezit počet mazaných řádků. Například následující příkaz smaže prvních 10 řádků z tabulky Osoby:

DELETE FROM Osoby LIMIT 10

Sama o sobě je klauzule LIMIT málo užitečná, pokud není spojena se setříděním řádků pomocí klauzule ORDER BY. Není totiž v našem případě přesně jasné, kterých 10 řádků se vlastně smaže.

Klauzule ORDER BY v příkazu DELETE

Klauzule ORDER BY má svůj užitek především při spojení s klauzulí LIMIT. Klauzule ORDER BY slouží k setřídění řádků podle určitých sloupců. Použití klauzule ORDER BY je naprosto stejné jako u příkazu SELECT ve 29. díle seriálu, podívejte se proto tam, jak se detailně používá.

Příkladem může být třeba příkaz, který setřídí řádky podle telefonního čísla a pak vymaže 3 osoby s nejmenšími telefonními čísly:

DELETE FROM Osoby ORDER BY Telefon LIMIT 3

Diskuze (19) Další článek: Novinka v USA: spamování přes Wi-Fi

Témata článku: Software, Programování, PHP, Díl, Sloupec, SQL, Insert, Order, Like, Stejný příkaz, Složitý způsob, Nejmenší telefon, From, DEL, Delete, Limit, Telefonní číslo, Následující řádek, Příkaz


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

Vybrali jsme 21 programovatelných hraček a stavebnic pro děti i jejich rodiče

Vybrali jsme 21 programovatelných hraček a stavebnic pro děti i jejich rodiče

** Získejte děti pro matematiku a základy techniky ** Kupte jim hračku nebo stavebnici, které vdechnou vlastní život ** Vybrali jsme 21 stavebnic pro malé caparty i budoucí experty na A.I.

Jakub Čížek | 11

Nejlepší notebooky do 20 000 Kč. Tipy, co se dnes vyplatí koupit

Nejlepší notebooky do 20 000 Kč. Tipy, co se dnes vyplatí koupit

** S cenou do 20 tisíc lze vybrat solidní notebook na práci i hry ** Přenosné notebooky nabídnou i kovová těla a rychlý hardware ** Na hraní se hodí více peněz, ale na použitelný základ dvacet tisíc stačí

Tomáš Holčík, David Polesný | 49

Co je TikTok: Svérázná sociální síť chytla mladé uživatele, už jich má už 1,5 miliardy

Co je TikTok: Svérázná sociální síť chytla mladé uživatele, už jich má už 1,5 miliardy

** Sociální síť TikTok získala stamiliony uživatelů a stále roste ** Jaký obsah na ní najdete a co můžete v jejím rámci čekat? ** Je to zábava pro mladé, nebo platforma pro úchyláky?

Karel Kilián | 37

České Rajče je stále plné dětských nahotin. Student pomocí A.I. analyzoval miliony fotek

České Rajče je stále plné dětských nahotin. Student pomocí A.I. analyzoval miliony fotek

** Rajče.net má odjakživa problémy s choulostivými fotkami dětí ** Student zlínské univerzity analyzoval jeho katalog ** Neuronová síť doposud prozkoumala 6 milionů snímků

Jakub Čížek | 73

Už desítky let se pokoušíme odposlouchávat mozek. Rusům se podařil kousek, ze kterého vám spadne brada

Už desítky let se pokoušíme odposlouchávat mozek. Rusům se podařil kousek, ze kterého vám spadne brada

** K odposlechu mozků používáme EEG ** To má ale žalostné informační rozlišení ** Rusům pomohla počítačová neuronová síť

Jakub Čížek | 29



Aktuální číslo časopisu Computer

Test 9 bezdrátových reproduktorů

Jak ovládnout Instagram

Test levných 27" herních monitorů

Jak se zbavit nepotřebných věcí na internetu