Vezérlőpult
9. UPDATE — sorok módosítása · Módosítás és törlés

4. blokk · Módosítás és törlés · 9. témakör

UPDATE — sorok módosítása

Az UPDATE meglévő sorok adatait módosítja: árat emel, készletet csökkent, státuszt vált. A DELETE-hez hasonlóan itt is életbevágó a WHERE — nélküle a teljes tábla minden sora megváltozik. Megnézzük a több oszlopos módosítást, a kifejezéseket és a biztonságos UPDATE-et — élő gyakorlóval. Ez a MySQL témakör záró fejezete.

Élő SQL-gyakorló10 kvízkérdés9 feladatZáró témakör

Tanulási célok

1Mi az UPDATE?

Az UPDATE a DML harmadik tagja (az INSERT és a DELETE mellett). Meglévő sorok oszlopértékeit módosítja — nem ad hozzá és nem töröl sorokat, csak a bennük lévő adatokat írja át.

UtasításMit csinál
INSERTÚj sort ad hozzá
UPDATEMeglévő sor(ok) értékeit módosítja
DELETESor(oka)t töröl

2Alap UPDATE + WHERE

A szerkezet: UPDATE tábla, SET melyik oszlop mi legyen, WHERE mely sorokra vonatkozzon.

UPDATE termek
SET ar = 7990
WHERE id = 1;
-- Az 1-es termék ára 7990 lesz; a többi sor változatlan.

3A WHERE nélküli UPDATE — minden sor megváltozik

Ahogy a DELETE-nél: ha elhagyod a WHERE-t, az UPDATE a tábla ÖSSZES sorát módosítja.

-- ⚠ VESZÉLY: MINDEN termék ára 0 lesz!
UPDATE termek SET ar = 0;
-- Nem csak egy sor — az egész tábla. Visszavonni csak ROLLBACK-kel/mentésből.
⛔ A WHERE ITT IS ÉLETBEVÁGÓ

A hiányzó WHERE az UPDATE-nél némán „felülír mindent” — nincs hibaüzenet. Éles adatbázison ez tömeges adatromlást okoz. Mindig ellenőrizd a feltételt, mielőtt futtatod!

4Több oszlop módosítása egyszerre

Egyetlen UPDATE-ben több oszlopot is átírhatunk — a SET után vesszővel elválasztva:

UPDATE termek
SET ar = 9990,
    keszlet = 50,
    nev = 'Vezeték nélküli egér (új)'
WHERE id = 1;
ℹ️ FIGYELD A VESSZŐT

Az oszlop=érték párokat vessző választja el, nem AND! (Az AND a WHERE-be való.) Gyakori kezdő hiba a SET a = 1 AND b = 2 — ez nem két értékadás, hanem egy logikai kifejezést rendel az a-hoz.

5Kifejezések a SET-ben

Az új érték lehet kifejezés is, amely akár a jelenlegi értékre épül. Így nem kell tudnunk a konkrét számot — relatív módosítást végezhetünk:

-- 10%-os áremelés minden termékre, egész forintra kerekítve:
UPDATE termek SET ar = ROUND(ar * 1.10);

-- Egy darab eladása: a készlet eggyel csökken
UPDATE termek SET keszlet = keszlet - 1
WHERE id = 1;

-- 20% akció a kifogyott termékekre (kiárusítás):
UPDATE termek SET ar = ROUND(ar * 0.80)
WHERE keszlet = 0;

(Az első, szándékosan WHERE nélküli áremelés éles Workbenchben csak a safe updates mód kikapcsolása után fut le — lásd a 7. szakaszt.)

✅ A JOBB OLDAL A RÉGI ÉRTÉKKEL SZÁMOL

A keszlet = keszlet - 1 kifejezésben a jobb oldali keszlet a sor jelenlegi értéke. Így biztonságosan léphetünk relatívan (növelés/csökkentés), versenyhelyzet nélkül.

6Feltételes és beágyazott UPDATE

A WHERE ugyanúgy használhat operátorokat és beágyazott lekérdezést, mint a SELECT-nél:

-- Az "uj" státuszú rendelések átállítása "feldolgozas"-ra:
UPDATE rendeles SET statusz = 'feldolgozas'
WHERE statusz = 'uj';

-- Subquery a WHERE-ben: emeljük meg a "Periféria" kategória árait
UPDATE termek SET ar = ROUND(ar * 1.05)
WHERE kategoria_id = (SELECT id FROM kategoria WHERE nev = 'Periféria');
✅ CASE: SORONKÉNT MÁS ÉRTÉK

Ha különböző soroknak különböző új értéket akarsz adni egy menetben, használd a CASE kifejezést: SET ar = CASE WHEN keszlet = 0 THEN ar*0.8 ELSE ar END.

7Biztonságos UPDATE

A védelmek ugyanazok, mint a DELETE-nél — az UPDATE ugyanúgy tömeges, visszafordíthatatlan kárt tud okozni:

-- 1) Előbb megnézzük, mit módosítanánk:
SELECT id, nev, ar FROM termek WHERE keszlet = 0;
-- 2) Ha stimmel, jöhet az UPDATE ugyanazzal a WHERE-rel:
UPDATE termek SET ar = ROUND(ar * 0.80) WHERE keszlet = 0;
-- Szándékos, WHERE nélküli tömeges módosítás (pl. 10% áremelés MINDEN termékre):
SET SQL_SAFE_UPDATES = 0;   -- a safe updates védelem kikapcsolása
UPDATE termek SET ar = ROUND(ar * 1.10);
SET SQL_SAFE_UPDATES = 1;   -- kapcsold vissza! (részletek: 8. témakör)

8Élő SQL-gyakorló

Módosíts a webshopon! A chipek tipikus UPDATE-mintákat töltenek be (áremelés, készletcsökkentés, státuszváltás). Az Adatok újratöltése gomb bármikor visszaállítja az eredeti állapotot.

SQL-gyakorló — UPDATE

SQL-motor betöltése…
⚠️ A GYAKORLÓRÓL

A motor SQLite-alapú: az UPDATE, a SET, a kifejezések, a tranzakció és a beágyazott lekérdezés azonos a MySQL-lel. Tipp: futtass egy módosítást, majd egy SELECT-tel nézd meg az eredményt (több utasítás is mehet egyszerre, pontosvesszővel elválasztva). (Internetkapcsolat szükséges a motorhoz.)

9Feladatok

Gyakorló feladatok

⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás — a kódírós feladatokat futtasd is le a fenti élő gyakorlóban!

9.1⭐

Írd le fejből az UPDATE alap szerkezetét (sablonként)!

9.2⭐

Mivel választod el egymástól a módosítandó oszlopokat a SET után?

9.3⭐

Mi a bevált első lépés egy UPDATE előtt, hogy ne ronts el adatokat?

9.4⭐

Mit csinál ez az utasítás?

UPDATE rendeles SET statusz = 'feldolgozas' WHERE statusz = 'uj';
9.5⭐⭐⭐

Miért veszélyes ez, és hogyan javítanád?

UPDATE termek SET ar = 0;
9.6⭐⭐

Mit módosít ez, és mire figyelj a vesszővel kapcsolatban?

UPDATE termek SET ar = 9990, keszlet = 50 WHERE id = 1;
9.7⭐

Kódírás: állítsd a 3-as termék árát 4990-re!

9.8⭐⭐

Kódírás: adj 15% akciót (árcsökkentést, egészre kerekítve) minden kifogyott (keszlet = 0) termékre!

9.9⭐⭐⭐

Kódírás: tranzakcióval emeld 5%-kal a „Periféria” kategória termékeinek árát (subquery a kategóriára), de építsd be a visszavonás lehetőségét (ROLLBACK)! Ellenőrizd SELECT-tel a módosítás előtti és utáni árakat.

10Önellenőrző kvíz

Ellenőrizd magad!

Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.

11Fogalomtár

FogalomJelentés
UPDATE · SETmeglévő sorok oszlopértékeinek átírása (DML)
WHERE nélküli UPDATEa tábla ÖSSZES sora megváltozik — némán, hibaüzenet nélkül
több oszlop egyszerreSET a = …, b = … — vesszővel, nem AND-del
kifejezés a SET-benaz új érték a régire is épülhet: keszlet = keszlet - 1
CASE a SET-bensoronként más érték egyetlen UPDATE-ben
subquery a WHERE-bena módosítandó sorokat egy másik lekérdezés jelöli ki
ON UPDATE szabálya hivatkozott kulcs módosítását szabályozza (RESTRICT/CASCADE)
„előbb SELECT” mintaugyanazzal a WHERE-rel előbb SELECT — ellenőrzés módosítás előtt
safe updates móda Workbench védelme a kulcs nélküli UPDATE/DELETE ellen — kapcsolója: SET SQL_SAFE_UPDATES = 0 / 1
tranzakcióBEGIN → UPDATE → ROLLBACK (visszavon) vagy COMMIT (véglegesít)

12Összegzés

  1. Az UPDATE meglévő sorok oszlopértékeit módosítja (DML).
  2. UPDATE tabla SET oszlop = érték WHERE feltétel; — csak az illeszkedő sorok módosulnak.
  3. WHERE nélkül az ÖSSZES sor megváltozik — mindig ellenőrizd a feltételt!
  4. Több oszlop: SET a = …, b = … (vesszővel, nem AND-del).
  5. Az új érték lehet kifejezés, akár a régi értékre építve: ar = ROUND(ar * 1.1), keszlet = keszlet - 1.
  6. Biztonság: előbb SELECT, tranzakció + ROLLBACK, safe updates (SET SQL_SAFE_UPDATES = 0/1), mentés.
🎉 A MYSQL TÉMAKÖR KÉSZ!

Ezzel végigvettük a teljes MySQL anyagot: tervezés, Workbench, EER-diagram, CREATE, ALTER, INSERT, a teljes SELECT (alapok, aggregáció, JOIN, beágyazott lekérdezések), DELETE és UPDATE. A következő nagy téma — amikor odaérünk — a webfejlesztés (JavaScript), majd a C#/Laravel backend lesz.