Megszorítások, megkötések, kényszerfeltételek SQL adatbázis-kezelő rendszerben (NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK, DEFAULT)

Ebben az adatbázis leckében a megszorítások típusait és használatát fogjuk bemutatni.

SQL alapok kezdőknek, SQL ismeretek kurzus borítókép

Megszorítások, megkötések, kényszerfeltételek SQL adatbázis-kezelő rendszerben (NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK, DEFAULT)

Ebben az adatbázis leckében a megszorítások típusait és használatát fogjuk bemutatni. A megszorításokat angolul “constraint”-nek nevezik, míg magyarul szokás még megkötéseknek, korlátozásoknak illetve kényszerfeltételeknek is hívni.

Mik azok a megszorítások?

Az SQL megszorítások célja elkerülni azt, hogy a felhasználó helytelen rekordokat vigyen fel az adatbázisba. A korlátozások az adatbázistábla oszlopaira, azaz mezőire vonatkozó szabályok.

Megkülönböztetünk oszlop- és táblaszintű megszorítást. Az oszlopszintű megszorítások csak egy oszlopra vonatkoznak, míg a táblaszintű korlátozások az egész táblára.

Ebben a leckében mi az oszlopokra vonatkozó megkötéseket fogjuk részletezni.

Megszorítások szintaktikája

A megszorításokat a tábla létrehozásakor tudjuk definiálni. Meg kell adnunk az oszlop nevét, az adattípusát, majd magát a megszorítást. Lentebb bemutatjuk, hogy milyen megszorítások használhatóak.

CREATE TABLE tábla (
    oszlop1 adattípus megszorítás,
);

Megszorításokat nem csak létrehozni, de módosítani, törölni is lehet.

>> A tábla módosításáról itt olvashatsz bővebben. <<

Megszorítások fajtái

Lentebb láthatjátok a leggyakrabban használt SQL megszorításokat, kényszerfeltételeket egy rövid leírással. Lentebb ezen megkötések részletesebben is bemutatásra kerülnek.

NévLeírás
NOT NULLaz oszlop értéke nem lehet NULL (üres)
UNIQUEaz oszlop összes értékének egyedinek kell lenni
PRIMARY KEYa NOT NULL és a UNIQUE kombinációja, minden rekordnak egyértelműen beazonosíthatónak kell lennie
FOREIGN KEYegyértelműen beazonosíthatónak kell lennie egy rekordnak egy másik táblában
CHECKaz oszlop értékének meg kell felelnie a meghatározott feltételnek
DEFAULTegy alapértelmezett értéket állít be az oszlopnak, ha a felhasználó nem adott volna meg értéket

A NOT NULL megszorítás

Ha egy mezőre vonatkozólag NOT NULL megszorítást teszünk, akkor az a mező soha nem vehet fel NULL, azaz üres értéket. Tulajdonképpen ez kötelező a felhasználót, vagy az adatbáziskezelőt, hogy a rekordfelvitelkor kitöltse a mezőt, azaz határozzon meg értéket a számára.

NOT NULL szintaxis

Az oszlop neve és adattípusa után szimplán meg kell adni a “NOT NULL” megkötést.

CREATE TABLE tábla (
    oszlop adattípus NOT NULL
);
Code language: PHP (php)

NOT NULL példa

Ebben a példában meghatároztuk, hogy a vezeték- és keresztnevet kötelező kitölteni, azaz nem lehet üresen hagyni.

SQL kód

CREATE TABLE vasarlok (
    vezeteknev VARCHAR(30) NOT NULL,
    keresztnev VARCHAR(30) NOT NULL
);
Code language: PHP (php)

UNIQUE megkötés

Ha egy oszlopra UNIQUE megszorítást alkalmazunk, akkor azon mező értékeinek teljesen egyedieknek kell lenniük. Azaz minden sornak egyedi értékkel kell rendelkeznie arra az oszlopra vonatkozólag, amelyre alkalmazzuk a megszorítást.

UNIQUE szintaxis egy oszlopra vonatkozólag MySQL-ben

Az oszlop neve után következik az adattípus és a NOT NULL megkötés, majd vesszővel elválasztva adjuk meg az UNIQUE kulcsszó után azt az oszlopot, amelyikre vonatkozólag szeretnénk, hogy csak egyedi értékek forduljanak elő értékei között.

CREATE TABLE tábla (
    oszlop adattípus NOT NULL,
    UNIQUE(oszlop)
);
Code language: PHP (php)

UNIQUE szintaxis több oszlopra vonatkozólag

Az alábbi szintaxis egységes, hiszen a MySQL, az SQL Server, az Oracle Database és az MS Access adatbázis-kezelő rendszerben is megegyezik.

CREATE TABLE tábla (
    oszlop1 adattípus NOT NULL,
    oszlop2 adattípus NOT NULL,
    CONSTRAINT név UNIQUE (oszlop1,oszlop2 ...)
);
Code language: PHP (php)

UNIQUE példa

Az alábbi példában azt a megszorítást hoztuk meg, hogy a személyazonosító igazolvány számának egyedinek kell lenni. Azaz, ha valaki olyan értéket próbál felvinni, amely már megtalálható a táblában, akkor a rendszer nem fogja engedélyezni.

CREATE TABLE vasarlok (
    szemelyazonosito_igazolvany VARCHAR(9) NOT NULL,
    UNIQUE(szemelyazonosito_igazolvany)
);
Code language: SQL (Structured Query Language) (sql)

A PRIMARY KEY kényszerfeltétel

A PRIMARY KEY megszorítást magyarul elsődleges kulcsnak nevezzük. Az elsődleges kulcs egy olyan érték, amely alapján minden rekord egyértelműen és összetéveszthetetlenül beazonosítható. Ebből kifolyólag az elsődleges kulcs egy teljesen egyedi érték, ez az érték nem tartalmazhat NULL-t.

>> Az elsődleges kulcsról itt olvashatsz bővebben. <<

PRIMARY KEY szintaxis

Először definiálnunk kell egy mezőt, melyhez meg kell adnunk a típusát, illetve ki kell kötnünk, hogy az értéke nem lehet NULL. Majd a következő sorban a PRIMARY KEY utasítással megadjuk, hogy az előbb definiált mező lesz az elsődleges kulcs. Ne felejtsük el, hogy az egyes utasítások között vessző van, elég gyakori hiba, amely sok fejfájást okoz és nehéz észrevenni is.

Egyszerű elsődleges kulcs létrehozása MySQL-ben

CREATE TABLE tábla (
    oszlop adattípus NOT NULL,
    PRIMARY KEY (oszlop)
);
Code language: PHP (php)

Összetett kulcs esetében a szintaxis nem változik, csak abban a pontban, ahol megadjuk, hogy mely mező legyen az elsődleges kulcs. Korábban csak egyetlen egy oszlopot adtunk meg, egy összetett kulcs esetében viszont többet is megadunk.

Összetett elsődleges kulcs létrehozása MySQL-ben

CREATE TABLE tábla (
    mező1 adattípus NOT NULL,
    mező2 adattípus,
    PRIMARY KEY (mező1, mező2)
);
Code language: PHP (php)

PRIMARY KEY példa

Ebben a példában létrehozunk “vasarlok” táblát, amelynek a “vasarloID” névre keresztelt mező lesz az elsődleges kulcsa.

SQL kód

CREATE TABLE vasarlok (
    vasarloID int NOT NULL,
    PRIMARY KEY (vasarloID)
);
Code language: PHP (php)

A FOREIGN KEY korlátozás

Az idegen kulcsot magyarul szokás másodlagos kulcsnak is nevezni, míg angolul FOREIGN KEY-ként hivatkozunk rá. A másodlagos kulcs egy olyan oszlop vagy több oszlop, amely kapcsolatot biztosít két tábla adatai között. Az idegen kulcs egy olyan azonosító, amellyel egy másik tábla elsődleges kulcsára hivatkozhatunk. Leegyszerűsítve azt mondhatjuk, hogy az idegen kulcs egy másik tábla elsődleges kulcsa.

>> Az idegenkulcsról itt olvashatsz bővebben. <<

FOREIGN KEY szintaxis

Először szükségünk lesz egy mezőre, amelyet másodlagos kulcsnak nevezünk ki a FOREIGN KEY utasítással. A FOREIGN KEY utasítás után található zárójelek közé jön a jelenlegi táblában definiált mező neve, amelyet idegen kulcsként akarunk kinevezni. Majd ezt követi a REFERENCES szó és a másik tábla, amellyel kapcsolatot akarunk kialakítani. Ezt követően a zárójelek közé a másik tábla elsődleges kulcsát kell megadni.

Idegen kulcs létrehozása MySQL-ben

CREATE TABLE tábla (
    oszlop adattípus,
    FOREIGN KEY (oszlop) REFERENCES másikTábla(elsődlegesKulcs)
);

FOREIGN KEY példa

A lenti példában létrehozunk egy “vasarlasok” táblát, amelyben a “vasarloID” lesz az idegen kulcs, amely a “vasarlok” tábla “vasarloID” elsődleges kulcsára mutat.

SQL kód

CREATE TABLE vasarlasok (
    vasarloID int,
    FOREIGN KEY (vasarloID) REFERENCES vasarlok(vasarloID)
);

A CHECK megkötés

A CHECK megszorítás alkalmazásával meghatározhatunk egy feltételt, amelynek teljesülnie kell a mezőre vonatkozólag. Egy rekord csak akkor adható hozzá a táblához, ha a CHECK megszorításban meghatározott feltételnek megfelel az értéke.

CHECK szintaxis

Először meg kell adni az oszlop nevét, majd adattípusát, ezt követi egy NOT NULL megkötés, illetve egy CHECK megszorítás a korlátozó feltétellel.

CREATE TABLE tábla (
    oszlop adattípus NOT NULL,
    CHECK (feltétel)
);
Code language: SQL (Structured Query Language) (sql)

CHECK példa

A következő példában kikötöttük, hogy az életkor nem lehet üresen hagyva, illetve azt, hogy csak 18 év fölötti személyek rekordja vihető fel.

SQL kód

CREATE TABLE vasarlok (
    eletkor INT NOT NULL,
    CHECK (eletkor>=18)
);
Code language: SQL (Structured Query Language) (sql)

A DEFAULT kényszerfeltétel

Ez a megkötés meghatároz a mezők számára egy alapértelmezett értéket. Ez az alapértelmezett érték akkor kerül felhasználásra, ha a felhasználó az új rekord felvitelekor nem határozott meg értéket a mező számára. Azaz ilyenkor az alapértelmezett érték kerül a táblázatba.

DEFAULT szintaxis

Először meg kell adni az oszlop nevét, adattípusát, majd a DEFAULT kulcsszót és az alapértelmezett értéket.

CREATE TABLE tábla (
    oszlop adattípus DEFAULT érték
);
Code language: SQL (Structured Query Language) (sql)

DEFAULT példa

Az alábbi példában meghatároztuk, hogy ha valaki nem adja meg a nevét, akkor az adatbázisba alapértelmezetten egy “nem meghatározott” érték kerüljön be.

SQL kód

CREATE TABLE vasarlok (
    nem VARCHAR(20) DEFAULT 'nem meghatározott'
);
Code language: PHP (php)

Ha hasznos volt számodra, akkor kérlek oszd meg másokkal is, hogy ezzel támogass minket!