SQLShack (Magyar)

0 Comments

az előző cikkben általánosan használt SQL Server korlátok: nem NULL, egyedi és elsődleges kulcs, részletesen leírtuk az SQL Server első három típusát; Nem NULL, egyedi és elsődleges kulcs. Ebben a cikkben, megbeszéljük a másik három megszorítások; külföldi kulcs, ellenőrzés alapértelmezett leírásával mindegyik röviden, és gyakorlati példákat.,

FOREIGN KEY Constraint

az idegen kulcs egy adatbázis kulcs, amelyet két táblázat összekapcsolására használnak. Az idegen kulcskorlátozás az adatbázistáblák közötti kapcsolatokat úgy azonosítja, hogy az idegen kulcsot tartalmazó Gyermektáblában egy oszlopot vagy oszlopkészletet hivatkozik az elsődleges kulcs oszlopra vagy oszlopkészletre a szülő táblában.

a kapcsolat A gyermek, illetve a szülő asztalok által fenntartott ellenőrzi, hogy létezik a gyermek táblázat IDEGEN KULCS értéke a hivatkozott szülő tábla ELSŐDLEGES KULCS behelyezése előtt ezeket az értékeket a gyermek táblázat., Ily módon a külföldi KULCSKORLÁTOZÁS a szülői táblázatban az elsődleges kulcsra hivatkozó gyermektáblában érvényesíti az adatbázis hivatkozási integritását. A hivatkozási integritás biztosítja, hogy az adatbázistáblák közötti kapcsolat megmaradjon az adatok beillesztési folyamata során. Emlékezzünk vissza, hogy az elsődleges kulcskorlátozás garantálja, hogy a kijelölt oszlop vagy oszlopok NULL vagy ismétlődő értékei nem kerülnek beillesztésre a táblázatba, érvényesítve az adott táblázat entitás integritását., Az elsődleges kulcs által érvényesített entitás integritás, valamint a külföldi kulcs által érvényesített referenciális integritás együttesen alkotják a kulcs integritását.

Az IDEGEN KULCS megszorítást eltér az ELSŐDLEGES KULCS kényszer, hogy létrehozhat egyetlen, ELSŐDLEGES KULCS egy minden asztalra, a képesség, hogy hozzon létre több IDEGEN KULCS korlátok minden asztalra hivatkozva több szülő táblázat. Egy másik különbség az, hogy az idegen kulcs lehetővé teszi a NULL értékek beillesztését, ha nincs NULL korlátozás ezen a kulcson, de az elsődleges kulcs nem fogadja el a Nullokat.,

az idegen KULCSKORLÁTOZÁS lehetőséget ad arra is, hogy ellenőrizze, milyen lépéseket fog tenni, amikor a szülő táblázatban szereplő hivatkozott értéket frissítik vagy törlik, az ON UPDATE és a DELETE záradékok használatával. A szülői táblázat értékeinek törlésekor vagy frissítésekor megtehető támogatott műveletek a következők:

  • nincs művelet: ha az ON UPDATE vagy a DELETE záradékok nincsenek beállítva, a szülői táblázatban végrehajtott frissítés vagy törlés művelet hibával meghiúsul.,
  • CASCADE: ha az ON UPDATE vagy a DELETE záradékokat kaszkádra állítja, akkor a szülő táblázat hivatkozott értékein végrehajtott művelet megjelenik a gyermek táblázat kapcsolódó értékeiben. Ha például a hivatkozott érték törlődik a szülőtáblában, akkor a gyermektáblázat összes kapcsolódó sora is törlődik.
  • null beállítása: ezzel a frissítési és záradékok törlése opcióval, ha a szülő táblázatban szereplő hivatkozott értékek törlődnek vagy módosulnak, a gyermektáblázat összes kapcsolódó értéke NULL értékre van állítva.,
  • alapértelmezett beállítás: az ON UPDATE és a DELETE clauses alapértelmezett beállításával a szülőtáblában hivatkozott értékek frissítése vagy törlése esetén az idegen kulcs oszlopokkal ellátott gyermektáblában a kapcsolódó értékek az alapértelmezett értékre kerülnek.

az oszlop meghatározásakor hozzáadhatja az idegen KULCSKORLÁTOT a T-SQL Táblázat létrehozása utasítás használatával, vagy hozzáadhatja azt a Táblázat létrehozása után az ALTER TABLE T-SQL utasítás használatával. Két új táblát hozunk létre, hogy megértsük az idegen kulcskorlátozó funkciókat., Az első táblázat szülő táblaként fog működni, elsődleges kulcs oszlopként definiált ID oszlopmal. A második táblázat fog működni, mint a gyermek tábla, az ID oszlop meghatározása, mint a külföldi kulcs oszlop, amely hivatkozik az ID oszlop a szülő táblázat.,> ID INT PRIMARY KEY

Name VARCHAR(50) NULL
)
UGRÁS
CREATE TABLE ConstraintDemoChild
(
CID INT PRIMARY KEY
ID INT IDEGEN KULCS HIVATKOZÁSOK ConstraintDemoParent(ID)
)

létrehozása Után a két asztal, fogjuk be a három rögzíti, hogy a szülő az asztal, két rögzíti, hogy a gyermek táblázat segítségével a következő HELYEZZE be mondatok:

Az eredmény megmutatja, hogy a három rekordot sikeresen illeszteni a szülő táblázat., Az első rekord, amelyet megpróbáltunk beilleszteni a gyermektáblába, hiba nélkül beillesztésre kerül, mivel az 1 azonosító értéke már létezik a szülői táblázatban.,mert az ID értéke 4 nem létezik a szülő táblázat, valamint amiatt, hogy az IDEGEN KULCS megszorítást, akkor nem lesz képes, hogy helyezzen be egy ID érték a gyermek asztal, ami nem létezik a szülő táblázat:

Ellenőrzése a szülő, mind a gyermek asztalok tartalom, látni fogja, hogy csak egy lemezt helyezünk a gyerek asztal, mint látható az alábbi:

Mint mi, nem beszélve az IDEGEN KULCS megszorítást név létrehozása közben a gyerek asztal, SQL Server hozzárendel egy egyedi nevet, hogy mi lehet letölteni a INFORMATION_SCHEMA.,TABLE_CONSTRAINTS system view using the following query:

1
2
3
4
5
6
7
8

SELECT CONSTRAINT_NAME,
TABLE_SCHEMA ,
TABLE_NAME,
CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.,onstraintDemoChild
HOZZÁADÁS KÉNYSZER FK__ConstraintDe__ID
FOREIGN KEY (ID) HIVATKOZÁSOK ConstraintDemoParent(ID);

A művelet sikertelen lesz, mint az ID értéke 4 nem létezik a szülő tábla pedig eltörik a referenciális integritás között a gyermek, illetve a szülő táblázatok, amint látható, a következő hibaüzenet jelenik meg:

Ahhoz, hogy megteremtse az IDEGEN KULCS megszorítást a gyerek asztal van, hogy megszüntesse az, hogy a konfliktus első törlésével vagy frissítése, ami rekord., Here we will try to modify the ID value with the following UPDATE command:

1
2
3

UPDATE ., SET ID =2, AHOL ID = 4

Most, hogy az IDEGEN KULCS megszorítást hoz létre sikeresen hiba nélkül, mint alább látható:

EGY IDEGEN KULCS megszorítást lehet meghatározni, hogy az SQL Server Management Studio eszköz. Kattintson a jobb gombbal a kívánt asztalra, majd válassza a tervezési lehetőséget.,> A megjelenő ablakban könnyen adja meg a nevét, az IDEGEN KULCS megszorítást, az asztalok, s az oszlopok, hogy részt vesz ebben a kapcsolatban, kattintson a Táblák, Illetve az Oszlopok Specifikáció, ha ellenőrzi a meglévő adatokra van szükség, s végre a műveletet hajtson végre, amikor a hivatkozott rekord törölt vagy módosított, a szülő táblázat, az alábbiak szerint:

ELLENŐRIZZE a Kényszer

EGY CSEKKET kényszer határozza meg egy oszlopot vagy oszlopokat, hogy korlátozza a értéktartomány, hogy lehet illeszteni ezek az oszlopok segítségével, előre meghatározott feltétele., Az ellenőrző kényszer a beillesztett vagy módosított értékek értékelésére szolgál, ahol a feltételnek megfelelő érték kerül beillesztésre a táblázatba, ellenkező esetben a betétművelet eldobásra kerül. Ugyanazon oszlophoz több ellenőrzési korlátozást is megadhat.

a check constraint feltétel meghatározása valahogy hasonlít egy lekérdezés WHERE záradékának írásához, a különböző összehasonlító operátorok, például ÉS, VAGY között, tetszik, és nulla, hogy megírja logikai kifejezését, amely igaz, hamis vagy ismeretlen., Az ellenőrző kényszer ismeretlen értéket ad vissza, ha NULL érték van jelen az állapotban. Az ellenőrző korlátozást elsősorban a tartomány integritásának érvényesítésére használják úgy, hogy a beillesztett értékeket a meghatározott értékek, tartomány vagy formátumszabályok betartására korlátozzák.

hozzunk létre egy új egyszerű táblázatot, amelynek három oszlopa van; az ID oszlopot, amelyet az adott táblázat, név és fizetés elsődleges kulcsának tekintünk. A Fizetési oszlopban egy CSEKKKORLÁTOT határoznak meg annak biztosítására, hogy az oszlopba ne kerüljön nulla vagy negatív érték.,v>6

7
8
9
CREATE TABLE ConstraintDemo4
(
ID INT PRIMARY KEY
Name VARCHAR(50) NULL,
Fizetés INT ELLENŐRZÉS (Fizetés>0)
)
UGRÁS

Ha végre az alábbi három HELYEZZE be mondatok:

egyértelmű, Hogy a létrehozott eredmény, hogy az első rekord egészül ki, nem hiba, mint a biztosított Fizetés értéke megfelel az ellenőrzés állapot.,rovided Fizetés értékek nem felelnek meg a CSEKKET kényszer állapota miatt behelyezése nulla vagy negatív Fizetés értékek, mint látható, a következő hibaüzenet jelenik meg:

Ellenőrzése a táblázat adatai azt mutatják, hogy csak az első sorban, hogy telt a CHECK constraint feltétel, be lesz illesztve az asztalra, mint az alábbi:

már említettük, ebben a cikkben, hogy az ELLENŐRZÉS kényszer lehetővé teszi behelyezése a NULL értékeket, ha a vett részt oszlopok lehetővé teszi, NULL, valamint a NULL értékeket fogja értékelni, mint ISMERETLEN, anélkül, hogy bármilyen hibát dobott., Ez a sikeresen beillesztett alábbi rekordból derül ki, bár a Fizetési oszlop megadott értéke NULL:

Ha az előző táblázat létrehozása nyilatkozatban áttekinti a check constraint definíciót, látni fogja, hogy nem említettük a meghatározott korlátozás nevét. Ebben az esetben az SQL Server hozzárendel egy egyedi nevet ehhez a korlátozáshoz, amelyet az INFORMATION_SCHEMA lekérdezésével lehet megjeleníteni.TABLE_CONSTRAINTS rendszer nézet a ConstraintDemo4 táblázat., Az eredmény az alábbiak szerint lesz:

a CHECK kényszer az ALTER TABLE T-SQL utasítás segítségével csökkenthető.,onstraint now, with the following ALTER DATABASE … ADD CONSTRAINT T-SQL statement:

1
2
3
4
5

ALTER TABLE ConstraintDemo4
ADD CONSTRAINT CK__Constrain__Salar
CHECK (Salary>0);

Adding the CHECK constraint will fail., Ez annak köszönhető, hogy az a tény, hogy bár az SQL Szerver ellenőrzi, hogy a meglévő adatok a CHECK constraint állapotban van, egy vagy több értékek, amelyek nem felelnek meg a kényszer állapotban találhatók, mint látható, a következő hibaüzenet jelenik meg:

Ahhoz, hogy meghatározza az ELLENŐRZÉS kényszer újra kellene módosítani vagy törölni az adatokat, amely megakadályozza, hogy a kényszer, hogy létre.,de484761″>

1
2
3
FRISSÍTÉS ConstraintDemo4 SET Fizetés =300, AHOL ID A (2,3)

a CHECK constraint lehet meghatározni, nem kérdés, az alábbiak szerint:

SQL Server lehetővé teszi, hogy tiltsa le az ELLENŐRZÉS kényszer különleges esetekben, például behelyezése hatalmas mennyiségű adatok nem törődve találkozó a kényszer állapota tesztelés céljából, vagy változása miatt az üzleti logika., Ez az eset csak az ideiglenesen letiltható csekk-és külföldi kulcskorlátokra érvényes.,riting a kényszer neve, mint a T-SQL-parancsot az alábbi:

1
2
3

ALTER TABLE ConstraintDemo4 NOCHECK KÉNYSZER MINDEN

a CHECK constraint meghatározása meghatározhatja, hogy a kényszer jön létre anélkül, hogy ellenőrizte meglévő sorok, de a kényszer lesz megjelölve a nem megbízható., engedélyezheti, ELLENŐRIZZE, korlátok, egyszerre használja a T-SQL-parancsot az alábbi:

1
2
3

ALTER TABLE ConstraintDemo4 ELLENŐRIZZE KÉNYSZER MINDEN

Miközben lehetővé teszi, hogy a korábbi ELLENŐRZÉS kényszer, látni fogja, hogy az SQL Server nem panaszkodnak, nem ellenőrzött adat, amely megtöri a kényszer állapotban., Ebben az esetben az adatok domain integritása nem marad fenn.

a probléma megoldásához a DBCC CHECKCONSTRAINTS parancs könnyen használható azon adatok azonosítására, amelyek egy meghatározott táblázatban vagy korlátozásban megsértik a kényszer állapotát, figyelembe véve, hogy a parancsot csúcsidőben nem futtatja, mivel ez befolyásolja az SQL szerver teljesítményét, mivel nem használ adatbázis-pillanatfelvételt.,v id=”ff419aa09d”>

1
2
3

DBCC CHECKCONSTRAINTS(ConstraintDemo4)

Az eredmény megmutatja, hogy a két Fizetés értékek szünetet a CHECK constraint állapotban van, az alábbiak szerint:

EGY CSEKKET kényszer is lehet létre, hogy az SQL Server Management Studio eszköz, a jobb gombbal a kívánt asztalra, majd válassza a Tervezési lehetőség., A megjelenő Design ablak, kattintson a jobb gombbal, majd válassza az Ellenőrzés Korlátok lehetőség a következőképpen:

a Check Korlátok ablakban megadhatja a CHECK constraint név, kifejezés, ha ellenőrzi a meglévő adatokra van szükség, az alábbiak szerint:

ALAPÉRTELMEZETT Kényszer

az ALAPÉRTELMEZETT korlát biztosításához használt alapértelmezett oszlop értéke a beszúrt sor, ha nincs érték megadva, hogy az oszlop BESZÚRÁSA nyilatkozatot., Az alapértelmezett kényszer segít megőrizni a domain integritását azáltal, hogy megfelelő értékeket biztosít az oszlophoz, abban az esetben, ha a felhasználó nem ad értéket hozzá. Az alapértelmezett érték lehet állandó érték, rendszerfunkció érték vagy NULL.,elow:

1
2
3
4

ALTER TABLE ConstraintDemo5
Hozzáadás Kényszer DF__Korlátozzák__Emplo ALAPÉRTELMEZETT (GETDATE()) A EmployeeDate

Is, az ALAPÉRTELMEZETT kényszer lehet meghatározni, az SQL Server Management Studio, ha a jobb gombbal a kívánt asztalra, majd válassza a Tervezési lehetőség., Ezután válassza ki azt az oszlopot, amelyhez alapértelmezett értéket fog hozzárendelni az oszlop tulajdonságai ablak böngészésével, az alábbiak szerint:

reméltem, hogy ez a cikk, valamint az előző, segített megmagyarázni a hat SQL Server kényszertípust. Kérjük, bátran tegyen fel bármilyen kérdést az alábbi megjegyzéseket.,csak használt SQL Server Megszorítások: NEM ÜRES, EGYEDI, ELSŐDLEGES KULCS

Hasznos linkek

  • Létre Ellenőrizze Korlátok
  • Korlátok
  • alapbeállítások lehetőséget
  • Létre Idegen Kulcs Kapcsolatok
  • ELLENŐRIZZE a Megszorítások

  • Szerző
  • Utolsó Hozzászólás
Ahmad Yaseen egy Microsoft Big Data mérnök, mély tudás, tapasztalat SQL BI, SQL Server Adatbázis-kezelés-Fejlesztési területeken.,
Microsoft Certified Solution Expert in Data Management and Analytics, Microsoft Certified Solution Associate in SQL Database Administration and Development, Azure Developer Associate and Microsoft Certified Trainer.
emellett számos blogban hozzájárul az SQL tippjeihez.,
összes Megtekintése hozzászólások Ahmad Yaseen

Legújabb hozzászólások Ahmad Yaseen (minden)
  • Hogyan monitor Azure Data Factory – január 15, 2021
  • A Forrása az Azure Data Factory – január 12, 2021
  • Sablonok Használata a Azure Data Factory – január 8, 2021


Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük