mirror of
https://github.com/pepaskopec-blip/Graduately.git
synced 2026-10-27 15:14:35 +00:00
79 lines
3.4 KiB
Markdown
79 lines
3.4 KiB
Markdown
---
|
|
id: sw-3-mysql-zmeny
|
|
nazev: MySQL: INSERT, UPDATE a DELETE
|
|
popis: Nový řádek, oprava a smazání. UPDATE a DELETE bez WHERE se ve škole nepíšou.
|
|
nazev_cviceni: Kvíz: změny dat
|
|
nadpis_kvizu: Poznejte bezpečný příkaz
|
|
---
|
|
|
|
# Výklad
|
|
|
|
## INSERT
|
|
*Nový žák*
|
|
|
|
- INSERT INTO zaci (jmeno, prijmeni, trida_id) VALUES ('Anna', 'Nováková', 1); přidá jeden řádek.
|
|
- Sloupce v závorce a hodnoty za VALUES musí být ve stejném pořadí a stejném počtu.
|
|
- id s automatickým číslem do výčtu nedávejte, server ho doplní.
|
|
- Jeden INSERT, jeden žák. Balit pět žáků do nepřehledného příkazu ve cvičení nemusíte.
|
|
|
|
> Tip: Když server hlásí neznámý sloupec, název nesedí s tabulkou. SHOW COLUMNS FROM zaci; ukáže pravdu.
|
|
|
|
## UPDATE
|
|
*Jen jeden řádek*
|
|
|
|
- UPDATE zaci SET trida_id = 2 WHERE id = 15; přepíše třídu jen žáku 15.
|
|
- Bez WHERE by stejný příkaz přepsat třídu všem. Ve škole se neodevzdává.
|
|
- Nejdřív SELECT s stejnou podmínkou WHERE. Až když vidíte jeden správný řádek, pusťte UPDATE.
|
|
- SET mění hodnoty. Není to SELECT a nic nevrací kromě počtu ovlivněných řádků.
|
|
|
|
> Tip: Klient ukáže, kolik řádků se změnilo. Když vidíte desítky a čekali jste jeden, zastavte se a volejte učitele. Záloha se hodí předtím, ne potom.
|
|
|
|
## DELETE
|
|
*Také s WHERE*
|
|
|
|
- DELETE FROM zaci WHERE id = 15; smaže jeden řádek.
|
|
- DELETE FROM zaci; bez WHERE smaže všechny žáky. To není čištění tabulky, to je ztráta dat.
|
|
- Smazaný řádek Ctrl+Z v MySQL nevrátí. Vrátí ho záloha, nebo ho vložíte znovu, když znáte hodnoty.
|
|
- Mazat třídu, na kterou ještě ukazují žáci, referenční pravidlo nemá dovolit. Nejdřív žáci, nebo třídu nemazat.
|
|
|
|
> Tip: Před DELETE udělejte SELECT se stejnou podmínkou. Počet řádků musí být ten, který čekáte, obvykle jeden.
|
|
|
|
## Zadání: tři změny na kopii
|
|
*Cvičení*
|
|
|
|
- Na cvičných datech vložte žáka Petr Svoboda do třídy 1, tedy trida_id 1.
|
|
- UPDATE mu změňte třídu na 2, ale jen přes jeho id, které jste předtím přečetli SELECTem.
|
|
- Téhož žáka DELETE smažte zase jen podle id. Ostatní žáci v tabulce zůstanou.
|
|
- Tři příkazy připojte do dotazy.sql pod komentář, který říká, že UPDATE a DELETE mají WHERE.
|
|
|
|
> Tip: Komentář v SQL začíná dvěma pomlčkami. Do příkazu se nepočítá, příštímu čtenáři řekne, proč tam WHERE je.
|
|
|
|
# Kvíz
|
|
|
|
## Který příkaz přidá Annu do třídy 1?
|
|
- [x] INSERT INTO zaci (jmeno, prijmeni, trida_id) VALUES ('Anna', 'Nováková', 1);
|
|
- SELECT Anna INTO zaci;
|
|
- UPDATE zaci SET Anna;
|
|
- DELETE FROM zaci WHERE jmeno = 'Anna';
|
|
> INSERT vkládá řádek. Sloupce a hodnoty drží pořadí.
|
|
|
|
## Jak se změní třída jen žáku s id 15?
|
|
- UPDATE zaci SET trida_id = 2;
|
|
- [x] UPDATE zaci SET trida_id = 2 WHERE id = 15;
|
|
- SELECT trida_id = 2;
|
|
- INSERT INTO zaci VALUES (15);
|
|
> Bez WHERE by se třída přepsala všem. WHERE id = 15 drží jeden řádek.
|
|
|
|
## Co udělá DELETE FROM zaci; bez WHERE?
|
|
- Nesmaže nic, WHERE je volitelné a server se zeptá
|
|
- [x] Smaže všechny řádky v zaci
|
|
- Smaže jen poslední řádek
|
|
- Jen vypíše žáky
|
|
> Bez podmínky je cílem celá tabulka. Ve školním cvičení takový příkaz nepište.
|
|
|
|
## Co uděláte těsně před UPDATE?
|
|
- DELETE bez WHERE
|
|
- [x] SELECT se stejnou podmínkou, ať vidíte ty řádky
|
|
- DROP tabulky
|
|
- Vypnete integritu
|
|
> SELECT ukáže, na koho UPDATE dopadne. Až pak má smysl stejné WHERE použít ke změně.
|