[[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.