Graduately/content/programove-vybaveni/3-rocnik/06-mysql-zmeny.md
pepaskopec-blip 264f4a73d8 Open software as four years from Windows and Office to policy.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-11 19:25:48 +02:00

3.4 KiB


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?

  • 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;
  • 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á
  • 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
  • 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ě.