Vezérlőpult
6. INSERT — adatok feltöltése · Táblák és adatok

2. blokk · Táblák és adatok · 6. témakör

INSERT — adatok feltöltése

A táblák készen állnak — itt az ideje feltölteni őket adatokkal. Az INSERT utasítással új sorokat szúrunk be: egyet vagy többet egyszerre, akár egy másik tábla adataiból is. A témakör végén élőben is feltöltheted a webshopot.

Élő SQL-gyakorló11 kvízkérdés10 feladatWebshop-séma

Tanulási célok

1Mi az INSERT?

Az INSERT az adatmanipulációs nyelv (DML) része — szemben a CREATE/ALTER szerkezetkezelő (DDL) utasításaival, az INSERT magukkal az adatokkal dolgozik: új sorokat ad a táblához.

CsoportUtasításokMit kezel
DDLCREATE, ALTER, DROPSzerkezet (táblák, oszlopok)
DMLINSERT, UPDATE, DELETEAdatok (sorok)
DQLSELECTAdatok lekérdezése (következő témakör)

2Alap INSERT

A leggyakoribb forma: megadjuk a tábla nevét, az oszlopok listáját, majd a VALUES után a hozzájuk tartozó értékeket — ugyanabban a sorrendben.

INSERT INTO vasarlo (vezeteknev, keresztnev, email, regisztracio_datuma)
VALUES ('Nagy', 'Anna', 'nagy.anna@pelda.hu', '2026-01-12');

3Az oszloplista — add meg mindig!

Az oszloplista technikailag elhagyható, ha minden oszlopnak, pontosan a tábla sorrendjében adsz értéket:

-- Működik, de TÖRÉKENY (a táblabeli sorrendtől függ):
INSERT INTO vasarlo VALUES (1, 'Nagy', 'Anna', 'nagy.anna@pelda.hu', '2026-01-12');
⚠️ MINDIG ÍRD KI AZ OSZLOPOKAT

Az oszloplista elhagyása veszélyes: ha valaki később ALTER-rel átrendezi vagy bővíti a táblát, a kód némán rossz oszlopba ír. Az explicit oszloplista (INSERT INTO vasarlo (vezeteknev, ...)) olvashatóbb és biztonságosabb — ezt szokd meg!

4Több sor egyszerre

Több sort egyetlen utasítással is beszúrhatunk — a VALUES után vesszővel elválasztott zárójeles csoportokkal. Ez gyorsabb is, mint külön utasításokban.

INSERT INTO kategoria (nev, szulo_id) VALUES
  ('Elektronika', NULL),
  ('Számítógép', 1),
  ('Periféria', 1);
✅ TÖMEGES BETÖLTÉS

Sok ezer sor egyszerre? A több soros INSERT sokkal gyorsabb, mint ugyanannyi különálló utasítás, mert egyszer kell „kommunikálni” a szerverrel.

5AUTO_INCREMENT, NULL és DEFAULT

Az id-t (AUTO_INCREMENT) ne add meg!

Az id oszlopot a szerver automatikusan kitölti. Egyszerűen hagyd ki az oszloplistából — így nem kell tudnod, mi a következő szám:

-- Az id kimarad → a szerver adja (pl. 1, 2, 3, ...):
INSERT INTO termek (nev, ar, keszlet, kategoria_id)
VALUES ('Vezeték nélküli egér', 6990, 40, 3);

És ha mégis megadjuk az id-t?

Két eset van, és mindkettő szabályos:

-- id = NULL → a szerver adja a következő sorszámot:
INSERT INTO termek (id, nev, ar, keszlet, kategoria_id)
VALUES (NULL, 'Webkamera', 12990, 30, 3);

-- id = 100 → pontosan a 100-as id-t kapja:
INSERT INTO termek (id, nev, ar, keszlet, kategoria_id)
VALUES (100, 'Dokkoló', 24990, 8, 2);

Fix id után a számláló igazodik: a következő automatikus sorszám a legnagyobb érték után folytatódik (a példában 101 lesz), így később sem lesz ütközés. Fix id-t jellemzően mentés visszatöltésekor használunk — a 8. szakasz dumpjai pontosan így, az eredeti id-kkal szúrják vissza a sorokat, hogy az idegen kulcs hivatkozások ne csússzanak el.

ℹ️ ÉS A 0?

MySQL-ben (alapbeállítás mellett) az id-nak adott 0 is a következő automatikus sorszámot kéri, akárcsak a NULL. A lenti gyakorló SQLite-motorja viszont a 0-t szó szerint szúrná be — ezt ezért élesben, Workbenchben próbáld ki.

NULL és DEFAULT

-- keszlet kimarad → DEFAULT 0 lesz:
INSERT INTO termek (nev, ar, kategoria_id)
VALUES ('Egér alátét', 1990, 3);

6INSERT ... SELECT — adat másik táblából

Beszúrhatunk olyan sorokat is, amelyek értékeit egy lekérdezés adja. Ezzel adatokat másolhatunk, archiválhatunk, vagy összegezhetünk egy másik táblába.

-- Az olcsó termékeket átmásoljuk egy akciós táblába:
INSERT INTO akcios_termek (nev, ar)
SELECT nev, ar FROM termek WHERE ar < 10000;

Itt nincs VALUES — a SELECT sorai lesznek a beszúrt sorok. A SELECT oszlopainak sorrendje és száma a cél-oszloplistához kell igazodjon. (A SELECT-tel a következő témakörben foglalkozunk részletesen.)

7Feltöltési sorrend és gyakori hibák

Az idegen kulcsok miatt a táblákat a megfelelő sorrendben kell feltölteni: előbb a szülő (hivatkozott) sor, csak utána a rá hivatkozó gyermek. A webshopnál ez azt jelenti:

HibaOkMegoldás
Duplicate entry / UNIQUEIsmétlődő egyedi érték (pl. már létező e-mail vagy id)Egyedi értéket adj; az id-t hagyd a szerverre
Column cannot be nullNOT NULL oszlopnak nem adtál értéketAdd meg a kötelező mezőt (pl. ar, nev)
Cannot add / foreign key failsNem létező szülő sorra hivatkozó idegen kulcsElőbb szúrd be a szülő sort (helyes sorrend)
Column count doesn't matchAz oszlopok és értékek száma eltérEgyezzen az oszlopok és a VALUES száma
ℹ️ MYSQL EXTRA: ON DUPLICATE KEY UPDATE

A MySQL-ben van egy hasznos kiegészítés: INSERT ... ON DUPLICATE KEY UPDATE ... — ha a beszúrás ütközne egy egyedi kulccsal (PRIMARY KEY vagy UNIQUE), akkor a meglévő sort frissíti a beszúrás helyett:

-- Árukészlet érkezett. Ha az 1-es id még szabad lenne, beszúrná a sort —
-- de mivel már foglalt, beszúrás helyett a készletet növeli:
INSERT INTO termek (id, nev, ar, keszlet, kategoria_id)
VALUES (1, 'Vezeték nélküli egér', 6990, 40, 3)
ON DUPLICATE KEY UPDATE keszlet = keszlet + 40;

Ez MySQL-specifikus (az alábbi gyakorló SQLite-motorja másképp oldja meg, ezért ott jelzést kapsz, ha kipróbálod).

8Mentés és visszatöltés — Data Export / Import

A táblák szerkezete és az adatok is megvannak — ideje gondoskodni róluk! Az adatbázisról rendszeresen érdemes biztonsági mentést készíteni. A Workbench Navigatorában (Management → Data Export) kiválaszthatjuk a sémát/táblákat, és egy .sql fájlba — úgynevezett dumpba — menthetjük:

A visszatöltés a Management → Data Import/Restore ponttal történik — így hozható vissza egy korábbi mentés, vagy tölthető be akár egy mástól kapott .sql fájl is.

ℹ️ A DUMP VALÓJÁBAN ISMERŐS

Egy .sql dump nem más, mint SQL-utasítások sorozata: CREATE TABLE-ök és INSERT-ek — pontosan azok, amiket ebben a blokkban tanultunk. Ezért egy dump a Query Editorban megnyitva és lefuttatva is visszatölthető.

9Élő SQL-gyakorló

Töltsd fel a webshopot! Az alapból betöltött adatokhoz adj újakat, vagy kezdj tiszta lappal az „Üres táblák” gombbal, és töltsd fel te magad — végül egy SELECT-tel ellenőrizd az eredményt.

SQL-gyakorló — adatok feltöltése

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

A motor SQLite-alapú (a böngészőben fut), és automatikusan kezeli a tananyag MySQL-szintaxisát. Az INSERT (egy és több soros), az INSERT ... SELECT, a NULL/DEFAULT és az auto-increment ugyanúgy működik, mint MySQL-ben. A MySQL-specifikus ON DUPLICATE KEY UPDATE itt nem fut — ha kipróbálod, a gyakorló megmagyarázza, miért. (Internetkapcsolat szükséges a motorhoz.)

10Feladatok

Gyakorló feladatok

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

6.1⭐

Írd le fejből az INSERT alap szerkezetét (sablonként, a tábla- és oszlopnevek helyén helykitöltőkkel)!

6.2⭐

Kódírás: szúrj be három kategóriát egyetlen utasítással!

6.3⭐⭐

Mi a MySQL ON DUPLICATE KEY UPDATE lényege egy mondatban?

6.4⭐⭐

Mi a hiba az alábbi utasításban? (A termek tábla oszlopai: id, nev, ar, keszlet, kategoria_id.)

INSERT INTO termek (nev, ar) VALUES ('Webkamera', 12990, 30);
6.5⭐⭐

Miért ad hibát ez, ha a vasarlo tábla email oszlopa UNIQUE, és már van nagy.anna@pelda.hu? (Próbáld is ki a gyakorlóban!)

INSERT INTO vasarlo (vezeteknev, keresztnev, email)
VALUES ('Nagy', 'Anna', 'nagy.anna@pelda.hu');
6.6⭐⭐⭐

Üres adatbázisban ez a két INSERT ebben a sorrendben hibát ad. Miért? (Az „Üres táblák” gombbal ki is próbálhatod.)

INSERT INTO termek (nev, ar, kategoria_id) VALUES ('Egér', 6990, 1);
INSERT INTO kategoria (nev) VALUES ('Periféria');
6.7⭐

Kódírás: szúrj be egy új vásárlót: Tóth Csaba, e-mail toth.csaba@pelda.hu, regisztráció 2026-02-18. (Az id-t hagyd a szerverre!)

6.8⭐⭐

Kódírás: szúrj be két terméket egyetlen utasítással: „Laptop 15 coll” 289 990 Ft, 5 db, 2-es kategória; és „USB pendrive 64GB” 3490 Ft, 100 db, 3-as kategória!

6.9⭐⭐⭐

Kódírás: hozz létre egy rendelést a 2-es vásárlónak (dátum: 2026-03-07 09:15:00), majd adj hozzá egy tételt: az 1-es termékből 2 db, 6990 Ft egységáron! Figyelj a sorrendre — melyik INSERT jön előbb, és miért?

6.10⭐⭐⭐

Egy kolléga elküldött egy webshop.sql dump fájlt. Hogyan töltöd be a saját szerveredre a Workbenchből? Írd le a lépéseket — és azt is, milyen alternatív módon futtathatnád le a fájlt!

11Önellenőrző kvíz

Ellenőrizd magad!

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

12Fogalomtár

FogalomJelentés
DMLadatmanipulációs nyelv: INSERT, UPDATE, DELETE — a sorokkal dolgozik
INSERT INTO ... VALUESúj sor(ok) beszúrása: tábla + oszloplista + értékek
oszloplistaa kitöltendő oszlopok explicit felsorolása — mindig add meg!
több soros INSERTVALUES (...), (...), (...) — gyorsabb, mint külön utasítások
aposztrófszöveg és dátum jelölése: 'Anna', '2026-01-12'; szám idézőjel nélkül
AUTO_INCREMENT kihagyásaaz id-t a szerver adja — kihagyjuk (a NULL ugyanezt kéri; fix érték konkrét id-t szúr be)
DEFAULTkihagyott oszlopnál az alapértelmezett érték kerül be
INSERT ... SELECTegy lekérdezés sorainak beszúrása — másolás, archiválás
feltöltési sorrendelőbb a szülő (hivatkozott) sor, utána a gyermek
ON DUPLICATE KEY UPDATEMySQL-extra: kulcsütközéskor beszúrás helyett frissít
dump · Data Export / Importa mentés .sql fájlja (CREATE + INSERT utasítások) · a Workbench mentő/visszatöltő eszköze

13Összegzés

  1. Az INSERT új sorokat ad a táblához (DML).
  2. Alap forma: INSERT INTO tábla (oszlopok) VALUES (értékek); — szöveg/dátum aposztrófban, szám anélkül.
  3. Mindig írd ki az oszloplistát — biztonságosabb és olvashatóbb.
  4. Több sor egyszerre: vesszővel elválasztott VALUES (...), (...) csoportok.
  5. Az AUTO_INCREMENT id-t hagyd ki (a NULL ugyanazt kéri, fix érték konkrét id-t szúr be); a DEFAULT és NULL oszlopok kihagyhatók.
  6. INSERT ... SELECT — sorok beszúrása egy lekérdezés eredményéből.
  7. Tölts a helyes sorrendben: előbb a szülő, utána a gyermek sor.
  8. Kész adatokról készíts mentést: Data Export (dump) — visszatöltés a Data Importtal vagy a dump lefuttatásával.