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év | Leírás |
---|---|
NOT NULL | az oszlop értéke nem lehet NULL (üres) |
UNIQUE | az oszlop összes értékének egyedinek kell lenni |
PRIMARY KEY | a NOT NULL és a UNIQUE kombinációja, minden rekordnak egyértelműen beazonosíthatónak kell lennie |
FOREIGN KEY | egyértelműen beazonosíthatónak kell lennie egy rekordnak egy másik táblában |
CHECK | az oszlop értékének meg kell felelnie a meghatározott feltételnek |
DEFAULT | egy 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
CREATE TABLE tábla (
oszlop adattípus NOT NULL,
UNIQUE(oszlop)
);
Code language: PHP (php)
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.
UNIQUE szintaxis több oszlopra vonatkozólag
CREATE TABLE tábla (
oszlop1 adattípus NOT NULL,
oszlop2 adattípus NOT NULL,
CONSTRAINT név UNIQUE (oszlop1,oszlop2 ...)
);
Code language: PHP (php)
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.
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)