[[oktatas:adatbázis-kezelés|< Adatbázis-kezelés]]
====== Megszorítások ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2014, 2021
* [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]]
* Web: https://szit.hu
===== A megszorításokról =====
Korlátozás vagy angolosan constraint.
Az adatbázis-megszorítások célja a helytelen rekordok létrejöttének megakadályozása.
===== Megszorítások eszközei =====
* kulcsok
* idegen kulcsok, hivatkozási integritás
* táblák megszorításai
* attribútumok értékeire vonatkozó megszorítások
* rekordokra vonatkozó megszorítások
* több táblára vonatkozó megszorítások
===== Megszorítások SQL-ben =====
==== kulcs ====
PRIMARY KEY
create table osztalyok(
az int not null primary key auto_increment,
nev varchar(50)
);
Egyediségi kényszer:
UNIQUE
create table dolgozok (
az int not null primary key auto_increment,
ig varchar(10) unique,
nev varchar(50)
);
==== idegen kulcs ====
Az idegenkulcsok általános szintaxisa:
[CONSTRAINT [szimbólum]] FOREIGN KEY
[index_nev] (index_oszlop_nev, ...)
REFERENCES tábla_név (index_oszlop_név,...)
[ON DELETE hivatkozás_kapcsoló]
[ON UPDATE hivatkozás_kapcsoló]
hivatkozás_kapcsoló:
RESTRICT | CASCADE | SET NULL | NO ACTION
Egyszerűbben:
FOREIGN KEY () REFERENCES ()
Példa:
create table osztalyok(
az int not null primary key auto_increment,
nev varchar(50)
);
create table dolgozok(
az int not null primary key auto_increment,
nev varchar(50),
osztalyAz int,
foreign key (osztalyAz) references osztalyok (az)
);
create table osztalyok(
az int not null primary key auto_increment,
nev varchar(50)
);
create table dolgozok(
az int not null primary key auto_increment,
nev varchar(50),
osztalyAz int,
constraint dolgozok_megkotes
foreign key (osztalyAz)
references osztalyok (az)
);
Hivatkozáskapcsolók:
* RESTRICT - a szülőtábla nem módosítható
* CASCADE - a változások a gyermektáblában is végbemennek
* SET NULL - a gyermeksorok idegenkulcsai NULL értékre állnak
* NO ACTION - a RESTRICT szinonimája
create table osztalyok(
az int not null primary key auto_increment,
nev varchar(50)
);
create table dolgozok(
az int not null primary key auto_increment,
nev varchar(50),
osztalyAz int,
constraint dolgozok_megkotes
foreign key (osztalyAz)
references osztalyok (az)
on delete cascade
on update cascade
);
==== attribútum értékére vonatkozó megszorítások ====
Nem lehet NULL feltételek
NOT NULL
Bonyolultabb meghatározások:
CHECK ...
Új érték esetén ellenőriz.
Érték tartományra való megszorítások
create table telepuleseink (
telepules varchar(50) check (telepules in ('Miskolc', 'Szolnok'))
);
Felvenni csak Miskolc és Szolnok települést lehet.
==== globális megszorítások ====
=== Sorra vonatkozó ===
CHECK ...
Több mező:
create table szamok (
szam1 int check (szam1 >= 5),
szam2 int check (szam2 >= 5),
constraint nagyobb check (szam1>szam2)
);
Egy rekordon belül a szam1-nek nagyobbnak kell lenni, szam2.