Categorias: Todos - adatbázis

por Szilard Denes 7 anos atrás

438

Adatintegritási szabályok (adatbázis kényszerek)

Az adatbázisok hatékony működésének és megbízhatóságának kulcsfontosságú elemei a kényszerek, amelyek szabályokat állítanak fel a táblák és azok oszlopai számára. Ezek a szabályok biztosítják, hogy az adatbázis konzisztens és használható maradjon, elkerülve a logikai ellentmondásokat, és megakadályozva a helytelen adatok bekerülését.

Adatintegritási szabályok (adatbázis kényszerek)

Adatintegritási szabályok (adatbázis kényszerek)

Kényszerek szerepe

A kényszerek a táblákra/azok oszlopaira vonatkozó szabályok.

Biztosítják az adatbázis konzisztenciáját, hogy használható legyen az adatbázis, logikai ellentmondásokat ne tartalmazzon.

(biztosítják, hogy az adatbázis módosítások ne eredményezhessenek helytelen sorokat a relációban.)

Deklarációk, tehát a DDL (Data definition language) részei szintaktikailag.


Többfelhasználós környezetben és tranzakciós működés során (az egyidejű módosítások következtében) sok probléma merül fel ekörül.


Forrás:

http://www.inczedy.hu/~szikszai/adatbazis/sql1.pdf

Előadás diái

kényszerek biztosítása

Betartásukat az RDBMS (Relational database management system) automatikusan biztosítja. Nem enged meg olyan adatbázis műveleteket, amelyek révén az adatok a szabályokat megszegnék.


A relációsadatbázis-kezelő rendszer (angol rövidítéséből: RDBMS) egy olyan adatbázis-kezelő rendszer ,amelynek logikai adatbázisát szoftverkomponensei kizárólag a relációs adatmodellek elvén épülnek fel, illetve kérdezhetőek le. Más szavakkal kifejezve: az RDBMS kizárólag az relációs adatmodell alapú megközelítést támogatja. Amennyiben más adatmodell is kiszolgálható ilyen rendszerrel, úgy a kapcsolódó adatmodell függvényében objektumrelációs, illetve deduktív relációs adatbázisról beszélhetünk. A relációsadatbázis-kezelő rendszerek szabványos adat hozzáférési és adatdefiníciós nyelve az SQL.


Forrás:

https://hu.wikipedia.org/wiki/Rel%C3%A1ci%C3%B3sadatb%C3%A1zis-kezel%C5%91_rendszer

Kényszerek létrehozása

Kényszert létrehozhatunk

A kényszerek a


Nem minden értékkorlátozást lehet kényszerrel megadni.


Forrás:

előadás diái

Alter Table

Miután már létrehoztunk egy táblát, utólag is hozzáadhatunk kényszereket.


Általános alak:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE];


Példa:

ALTER TABLE suppliers
ADD CONSTRAINT check_supplier_name
  CHECK (supplier_name IN ('IBM', 'Microsoft', 'NVIDIA'));


Itt a check_supplier_name CONSTRAINT biztosítja, hogy a supplier_name oszlop értékei csak IBM, Microsoft vagy NVIDIA lehessen.


Forrás:

https://www.techonthenet.com/oracle/check.php


Drop Constraint

DROP CONSTRAINT-el törülhetünk korábban létrehozott függőséget/korlátot.

Fontos, hogy Primary Key/Unique Constraint nem dobható el, ha foreign key megszorításban hivatkozunk rá.


Formája:

ALTER TABLE table_name
DROP CONSTRAINT constraint_name;


Példa:

A supplier táblában a supplier_id a primary key. Products táblában fk_supplier néven létrehoztunk egy idegen kulcsot, mely a supplier tábla supplier_id mezőjére mutat. Ezt a végén a DROP utasítással töröltük.


CREATE TABLE supplier
( supplier_id numeric(10) not null,
  supplier_name varchar2(50) not null,
  contact_name varchar2(50),
  CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
);

CREATE TABLE products
( product_id numeric(10) not null,
  supplier_id numeric(10) not null,
  CONSTRAINT fk_supplier
    FOREIGN KEY (supplier_id)
    REFERENCES supplier(supplier_id)
);
ALTER TABLE products
DROP CONSTRAINT fk_supplier;


Forrás:

https://www.techonthenet.com/oracle/foreign_keys/drop.php

Előadás diái

Disable Constraint

Alapbeállítás esetén a CONSTRAINT ENABLED (engedélyezve) állapotban található, de ha nem akarjuk engedélyezni, akkor a DISABLE-lel tudjuk ezt megtenni.


Formája:

ALTER TABLE table_name
DISABLE CONSTRAINT constraint_name;


Példa:

A supplier táblában a supplier_id a primary key. Products táblában fk_supplier néven létrehoztunk egy idegen kulcsot, mely a supplier tábla supplier_id mezőjére mutat. Ezt a végén a DISABLE utasítással felfüggesztettük.

CREATE TABLE supplier
( supplier_id numeric(10) not null,
  supplier_name varchar2(50) not null,
  contact_name varchar2(50),
  CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
);

CREATE TABLE products
( product_id numeric(10) not null,
  supplier_id numeric(10) not null,
  CONSTRAINT fk_supplier
    FOREIGN KEY (supplier_id)
    REFERENCES supplier(supplier_id)
);
ALTER TABLE products
DISABLE CONSTRAINT fk_supplier;


Forrás:

https://www.techonthenet.com/oracle/foreign_keys/disable.php

Enable Constarint

Alapbeállítás esetén a CONSTRAINT ENABLED (engedélyezve) állapotban található, de ha DISABLED (nincs engedélyezve) állapotban van, akkor engedélyezni kell, hogy érvényesüljön.


Formája:

ALTER TABLE table_name
ENABLE CONSTRAINT constraint_name;


Példa:

A supplier táblában a supplier_id a primary key. Products táblában fk_supplier néven létrehoztunk egy idegen kulcsot, mely a supplier tábla supplier_id mezőjére mutat. Ezt a végén ENABLE-vel engedélyeztük.

CREATE TABLE supplier
( supplier_id numeric(10) not null,
  supplier_name varchar2(50) not null,
  contact_name varchar2(50),
  CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
);

CREATE TABLE products
( product_id numeric(10) not null,
  supplier_id numeric(10) not null,
  CONSTRAINT fk_supplier
    FOREIGN KEY (supplier_id)
    REFERENCES supplier(supplier_id)
);
ALTER TABLE products
ENABLE CONSTRAINT fk_supplier;


Forrás:

https://www.techonthenet.com/oracle/foreign_keys/enable.php

Create Table

Már a tábla létrehozásának pillanatában is létrehozhatunk kényszereket, mellyel biztosítjuk, hogy az adatok feltöltése során nem kerülhet be a táblába biztosan hibás adat.


Általános formája:

CREATE TABLE table_name
(
  column1 datatype null/not null,
  column2 datatype null/not null,

  ...

  CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE]

);


példa:


CREATE TABLE suppliers
(
  supplier_id numeric(4),
  supplier_name varchar2(50),
  CONSTRAINT check_supplier_id
  CHECK (supplier_id BETWEEN 100 and 9999)
);


A suppliers táblában a supplier_id nem lehet 100nál kisebb és 9999nél nagyobb, (mert mondjuk nem létezik ilyen), akkor nem fogja engedni ezeknek a hozzáadását a CHECK kényszer miatt.


Forrás:

https://www.techonthenet.com/oracle/check.php

Drop Table

DROP TABLE utasítással törülhetünk egy korábban létrehozott táblát.


formája:

DROP TABLE table_name;


forrás:

https://www.tutorialspoint.com/sql/sql-drop-table.htm

Nem használható

Fontos, hogy szülő tábla nem dobható el Foreign Key megszorításban.


példa:

A következő esetben a RESZLEGEK táblát nem tudjuk DROP utasítással törölni, mert a MUNKASOK tabla hivatkozik rá.


CREATE TABLE RESZLEGEK(RÉSZLEG_ID NUMBER(4)PRIMARY KEY,RÉSZLEG_NÉV VARCHAR(30));


CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6),VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4)

REFERENCES RESZLEGEK(RÉSZLEG_ID));


DROP TABLE RESZLEGEK; -->nem fut le

Azonban ha előbb eldobjuk a MUNKASOK táblát, utána már szabadon eldobhatjuk a RESZLEGEK táblát is.


DROP TABLE MUNKASOK; -->lefut

DROP TABLE RESZLEGEK; -->lefut


Forrás:

Saját példa

Használható

Ha nem hivatkozik a táblánkra semmi, szabadon törölhetjük a táblát.


Példa:

CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7) PRIMARY KEY, Név VARCHAR(50),Fizetés DECIMAL(7,0) );


DROP TABLE Dolgozó; -->törlődik a tábla



Amit nem lehet kényszerrel

Bonyolultabb megszorításokat nem mindig lehet kényszerekkel megadni.

Példa: A dolgozó fizetése nem lehet több, mint a főnökének a fizetése.


Ha nem megoldható valami deklaratív szabályokkal, akkor programkódokkal kell. Erre alkalmasak az adatbázis triggerek.



*Triggerek a következő óráknak az anyaga lesz, akit érdekel:

https://docs.oracle.com/cd/A57673_01/DOC/server/doc/SCN73/ch15.htm



Forrás:

Előadás diái



Trigger

A triggerek olyan speciális eljárások egy adatbázisban, amelyeket az INSERT, UPDATE, DELETE, TRUNCATE parancsok végrehajtások előtt, után vagy helyett hív meg a rendszer. A trigger vagy engedélyezheti vagy elvetheti az adott táblán történt módosításokat, naplózási feladatokat végezhet, járulékos módosításokat hajthat végre az adatbázisban.


Fajtái:


Fontos tudni, hogy egy táblázathoz parancsonként csak egy trigger rendelhető hozzá. Ez azt jelenti, hogy egy táblához legfeljebb három trigger készíthető el (INSERT, UPDATE, DELETE). Persze lehetőség van arra is, hogy egy trigger ne csak egy parancsnál legyen aktiválva. Előfordulhat, hogy például az INSERT és UPDATE parancsoknál történő ellenőrzések (szinte) megegyeznek: ilyenkor nem szükséges két triggert írni, hiszen az ellenőrzést eggyel is meg lehet oldani.


*Ez későbbi előadások anyaga


Forrás:

https://hu.wikipedia.org/wiki/Trigger_(adatb%C3%A1zisok)



Kényszerek működése

Az adatbáziskezelő rendszer figyeli a felhasználók által megkísérelt adatmódosításokat (INSERT, DELETE, UPDATE, stb.) és ha azok megpróbálnák megszegni "a szabályt", akkor azt azonnal megakadályozza, az ilyen műveletek nem sikerülnek. A megszorítások nevét a felhasználó megadhatja, egyébként a rendszer generál egy azonosító nevet SYS_Cn formátumban. Hibajelzésekben jelenik meg ez a név, valamint használhatjuk azokat az ALTER TABLE utasításban is. A megszorítás állapotban a megszorítási szabályok működtetésével kapcsolatos dolgokat lehet definiálni, például be- vagy kikapcsolt (ENABLE, DISABLE) állapot. Alaphelyzetben a megszorítások be vannak kapcsolva.


Általános alakja:

[CONSTRAINT megszorítás_név] megszorítás [megszorítás_állapot]


Bevezető példa: Dolgozó tábla


CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7) PRIMARY KEY, Név VARCHAR(50),Fizetés DECIMAL(7,0) );


A dolgozó törzsszáma maximum 7 karakter lehet és elsődleges kulcs, a név 50 karakter, a fizetés pedig maximum 7 jegyű egész szám.


Töröljük ki majd hozzuk létre egy olyan korlátozással a táblát, hogy fizetésnek ne lehessen 100000 forintnál (minimálbérnél) kevesebbet megadni.


DROP TABLE Dolgozó;

CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50), Fizetés DECIMAL(7,0) CHECK (Fizetés >100000));


insert into Dolgozó (A_dolgozó_törzsszáma,Név,Fizetés) values ('1112222','Nagy Erika','200000');

--->helyes


insert into Dolgozó (A_dolgozó_törzsszáma,Név,Fizetés) values ('1112222','Nagy Erika','40000');

--->nem fogja engedni, mert kisebb fizetés van megadva a minimálbérnél


Forrás:

http://aries.ektf.hu/~holovacs/AB/4_SQL_1.htm#s44

http://www.inczedy.hu/~szikszai/adatbazis/sql1.pdf

előadás diái

saját példa

Opcionális lehetőségek

A különböző adatbáziskezelő rendszerek más-más módon végzik a kényszerek ellenőrzését.


Forrás:

Előadás diái


Oracle

Az Oracle azonnal, a DML utasítás végén ellenőrzi a kényszert.


példa:

RÉSZLEGEK tábla RÉSZLEG_ID-ra hivatkozik a MUNKASOK tábla RÉSZLEG_ID-ja. MUNKASOK Táblában nem tudok adatot feltölteni addig, míg legalább egy RÉSZLEG_ID-t nem adtam meg a RÉSZLEGEK táblában. (Aki akarja kipróbálhatja)(És ezután is csak olyat lehet megadni ami megtalálható.)


CREATE TABLE RESZLEGEK(RÉSZLEG_ID NUMBER(4)PRIMARY KEY,RÉSZLEG_NÉV VARCHAR(30));


CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6),nev varchar(20), RÉSZLEG_ID NUMBER(4),

CONSTRAINT MUNKASOK_RESZLEGEK_FK FOREIGN KEY (RÉSZLEG_ID) REFERENCES RESZLEGEK(RÉSZLEG_ID));


Forrás:

Előadás diái

Saját példa

Kényszerek ellenőrzése

A kényszerek ellenőrzése különböző módon történik, a kényszertől függően.


Az indexek automatikusan létrejönnek a CONSTRAINT létrehozásának eredményeképpen. (Következő óra)


A legnagyobb kihívás a több felhasználó által egyidőben végrehajtott módosítások ellenőrzése jelenti. A FOREIGN KEY megszorítást a különböző adatbázis kezelő rendszerek más-más módon biztosítják. Egyes rendszereknél ilyenkor is kötelező az index (a külső kulcson) még másoknál csak ajánlott.


Forrás:

Előadás diái

Kényszerek típusai

Az SQL szabvány nem definiálja elég szigorúan, ezért az egyes adatbáziskezelő rendszerek valamelyest eltérhetnek egymástól ebben:


A kényszerek fajtái:


Forrás:

előadás diái

FOREIGN KEY

Az adatbázisokban nem csupán az egyedtípusokat, hanem azok közti kapcsolatokat is el kell tárolnunk. A táblák közötti kapcsolatok tárolására használjuk az idegen kulcsokat. Idegen kulcsnak nevezzük egy tábla olyan mezőjét, amelynek értékei egy másik tábla rekordjait azonosítják. Az idegen kulcs segítségével a táblák közötti kapcsolatokat tudjuk eltárolni a relációs adatmodellnek megfelelő adatbázisokban. Tehát a "külső kulcs" kényszer meggátolja, hogy olyan értéket vigyünk be egy tábla oszlopába, amely érték nem található meg egy táblánk elsődleges kulcsában vagy egyedi kulcsában.


példa:

Tegyük fel, hogy feladatunk, hogy személygépkocsik és tulajdonosaik adatinak tárolását szeretnénk megvalósítani.
Az autók rendszámát, gyártmányát, típusát, és hengerűrtartalmát, a tulajdonosok nevét, személyi igazolványszámát, valamint lakcímét szeretnénk tárolni.
Az Autók táblában a RendSzam a Személyek táblában a SzemIgSzam lesz az azonosító.
Az Autók egyedtípusban úgy jelezzük a tulajdonost, hogy a táblában elhelyezünk a Tulajdonos mezőt, amelynek minden értéke a Személyek tábla azonosító mezőjéből származik, azaz azonosít egy személyt.
Az Autók tábla Tulajdonos mezője idegen kulcs.


CREATE TABLE Autok (Rendszam VARCHAR(6),Gyártmány VARCHAR(30), Tipus VARCHAR(20), Hengerurtartalom NUMBER(3), Tulajdonos VARCHAR(8)

,CONSTRAINT autok_Tulajdonos_fk FOREIGN KEY (Tulajdonos) REFERENCES Tulajdonos(SzemIgSzam));


CREATE TABLE Tulajdonos(SzemIgSzam VARCHAR(8) PRIMARY KEY,Vezeteknev VARCHAR(20), Keresztnev VARCHAR(20), Lakcim VARCHAR(100));


Ezáltal, ha a személyek tábla tárolja az összes létező személyi igazolványszámot nem tudunk nem létező tulajdonost megadni egy autóhoz mert a tulajdonos mező idegen kulcs, mely csak a Személyek tábla SzemIgSzam-ból vehet fel értéket.



Forrás:

http://www.tankonyvtar.hu/hu/tartalom/tamop425/0005_25_adatbazis_kezeles_scorm_02/262_specilis_mezk_a_relcis_adatmodellben.html

Saját példa


Hierarchikus viszony ábrázolása relációsan

Ha egy tábla FOREIGN KEY kulcsa ugyanazon tábla PRIMARY KEY kulcsára hivatkozik, szülő-gyerek kapcsolatot tudunk létrehozni. Ezáltal a tábla egyik sorának nem lesz szülője. Ebben a sorban a FOREIGN KEY oszlop értéke NULL. Ez különösen hasznos nagy szervezeteknél, az információ áramlása során.


példa: Főnök-ügyvezető-menedzser-...


Forrás:

Előadás diái

https://docs.oracle.com/cd/E16582_01/doc.91/e15115/crtng_parnt_child_reltnps.htm#EOAHF00745

Ugyanazon táblára való hivatkozás

Foreign Key akár ugyanazon tábla elsődleges kulcsára is hivatkozhat.


Példa:

Itt a MENEDZSER_ID az idegen kulcs, mely a MUNKAS_ID-ra mutat, ami az elsődleges kulcs.


CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6) PRIMARY KEY,VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4),

MENEDZSER_ID NUMBER(6),

CONSTRAINT MUNKAS_MENEDZSER_FK FOREIGN KEY (MENEDZSER_ID) references MUNKASOK(MUNKAS_ID));


rövidebb megoldás:


CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6) PRIMARY KEY,VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4),

MENEDZSER_ID NUMBER(6) references MUNKASOK(MUNKAS_ID));


Forrás:

előadás diái

saját példa

Forma

Foreign Key-t többféle formában is megadhatjuk.


Példa:


A következő foreign key kényszerek ugyanazt eredményezik.


CREATE TABLE RESZLEGEK(RÉSZLEG_ID NUMBER(4)PRIMARY KEY,RÉSZLEG_NÉV VARCHAR(30));


CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6),VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4),

CONSTRAINT MUNKASOK_RESZLEGEK_FK FOREIGN KEY (RÉSZLEG_ID) REFERENCES RESZLEGEK(RÉSZLEG_ID));



CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6),VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4),

FOREIGN KEY (RÉSZLEG_ID) REFERENCES RESZLEGEK(RÉSZLEG_ID));



CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6),VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4) REFERENCES RESZLEGEK(RÉSZLEG_ID));



CREATE TABLE MUNKASOK (MUNKAS_ID NUMBER(6),VEZETEKNEV VARCHAR(30),KERESZTNEV VARCHAR(30), LAKCIM VARCHAR(50), RÉSZLEG_ID NUMBER(4) REFERENCES RESZLEGEK);



Forrás:

Előadás diái

Saját példa



UNIQUE KEY

A UNIQUE KEY biztosítja, hogy egy oszlopba különböző értékek kerüljenek (akárcsak a primary key), ebből viszont korlátlan számú lehet, akár 0 is. NULL értéket is felvehet, mert az ismeretlen értékkel nem szegjük meg az egyediséget.


Forrás:

https://www.techonthenet.com/oracle/unique.php

előadás diái

szintaxisa:

CREATE TABLE table_name
(
  column1 datatype [ NULL | NOT NULL ],
  column2 datatype [ NULL | NOT NULL ],
  ...

  CONSTRAINT constraint_name UNIQUE (uc_col1, uc_col2, ... uc_col_n)
);


A következő 3 példa egyaránt az email címet állítja be egyedire, azaz nem adható olyan email cím melyet már használ valaki, viszont üresen lehet hagyni, mert nem primary key.


CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50),Email VARCHAR(50) UNIQUE, Fizetés DECIMAL(7,0) );


CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50),Email VARCHAR(50), Fizetés DECIMAL(7,0), CONSTRAINT email_check UNIQUE(Email) );


CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50),Email VARCHAR(50)CONSTRAINT email_check UNIQUE, Fizetés DECIMAL(7,0) );


Forrás:

https://www.techonthenet.com/oracle/unique.php

saját példa

PRIMARY KEY

A Primary key egyértelműen azonosít minden rekordot a táblában. Célszerű, ha minden táblának van egy elsődleges kulcsa.


forrás:

előadás diái

https://www.techonthenet.com/oracle/primary_keys.php

szintaxisa:

CREATE TABLE table_name
(
  column1 datatype null/not null,
  column2 datatype null/not null,
  ...

  CONSTRAINT constraint_name PRIMARY KEY (column1, column2, ... column_n)
);


A következő 3 példa egyaránt a dolgozó törzsszámát állítja be elsődleges kulcsnak. Formailag a [CONSTRAINT constraint_name]-t ellehet hagyni, viszont ha a CONSTRAINT feltétel a végén található és nem közvetlen következik, akkor figyelni kell a vesszőre!


CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7) PRIMARY KEY, Név VARCHAR(50), Fizetés DECIMAL(7,0) );


CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7) CONSTRAINT dolgozo_pk PRIMARY KEY, Név VARCHAR(50), Fizetés DECIMAL(7,0) );


CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7) , Név VARCHAR(50), Fizetés DECIMAL(7,0), CONSTRAINT dolgozo_pk PRIMARY KEY (A_dolgozó_törzsszáma));


forrás:

előadás diái

https://www.techonthenet.com/oracle/primary_keys.php

CHECK

A CHECK kényszer egy olyan logikai kifejezés, melynek minden sorra teljesülnie kell. A kulcsszót 1 zárójelbe tett feltétel követi, amelyet az attribútum minden értékének ki kell elégítenie.

1 attribútumra vonatkozó CHECK feltételt csak akkor ellenőriz a rendszer, amikor valamelyik sorban az adott attribútum új értéket kap. Ha az új érték megsérti a feltételt, akkor a rendszer az adatmódosítást visszautasítja. Az SQL szintaxis sokszínűsége miatt több formában is lelehet írni ugyanazt. Az Oracle-on kívüli adatbáziskezelőknél emiatt formai különbségek előfordulhatnak.


Forrás:

http://vizsgazz.hu/index.php?option=com_content&view=article&id=74:09tetel&catid=105&Itemid=221

előadás diái


A következő 3 példa egyaránt azt korlátozza, hogy fizetésnek ne lehessen 100000 forintnál kevesebbet megadni. Formailag a [CONSTRAINT constraint_name]-t ellehet hagyni, viszont ha a CONSTRAINT feltétel a végén található és nem közvetlen következik, akkor figyelni kell a vesszőre!


CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50),    Fizetés DECIMAL(7,0) CHECK (Fizetés >100000));


CREATE TABLE Dolgozó (A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50),    Fizetés DECIMAL(7,0)CONSTRAINT Fizetes_min CHECK (Fizetés >100000));


CREATE TABLE Dolgozó (Fizetés DECIMAL(7,0), A_dolgozó_törzsszáma CHAR(7), Név VARCHAR(50), CONSTRAINT Fizetes_min CHECK (Fizetés >100000));


Forrás:

http://vizsgazz.hu/index.php?option=com_content&view=article&id=74:09tetel&catid=105&Itemid=221

saját példa

NOT NULL

A NOT NULL kényszer meggátolja, hogy a tábla egy oszlopában NULL (üres) érték tárolódjon. A feltétel ellenőrzése sor beszúrásakor, vagy az attribútum módosításakor történik. A CHECK CONSTRAINT egy speciális esetének tekinthető.


Forrás:

előadás diái

Használata

Az alapszintaxisa:

expression IS NOT NULL


Példa:

CREATE TABLE Dolgozó

(A_dolgozó_törzsszáma CHAR(7) PRIMARY KEY, Név VARCHAR(50),Email VARCHAR(50) NOT NULL, Fizetés DECIMAL(7,0) );


Az email címet kötelező kitölteni, nem vehet fel NULL értéket a korlátozás miatt.


Forrás:

https://www.techonthenet.com/oracle/isnotnull.php