Megosztás a következőn keresztül:


Egyedi korlátozások és ellenőrzési korlátozások

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Felügyelt PéldánySQL-adatbázis a Microsoft Fabricben

UNIQUE korlátozások és CHECK kényszerek két típusú kényszer, amelyek az SQL Server-táblák adatintegritásának kikényszerítésére használhatók. Ezek fontos adatbázis-objektumok.

Ez a cikk a következő szakaszokat tartalmazza.

EGYEDI korlátozások

A korlátozások olyan szabályok, amelyeket az SQL Server adatbázismotorja kényszerít Önnek. Például UNIQUE megkötések használatával gondoskodhat arról, hogy ne legyenek ismétlődő értékek olyan oszlopokban, amelyek nem vesznek részt az elsődleges kulcsban. Bár a UNIQUE kényszer és a PRIMARY KEY kényszer is az egyediséget kényszeríti ki, PRIMARY KEY kényszer helyett használjon UNIQUE kényszert, ha nem az elsődleges kulcsot tartalmazó oszlop (vagy oszlopkombináció) egyediségét szeretné kikényszeríteni.

A PRIMARY KEY korlátozásoktól eltérően UNIQUE megkötések lehetővé teszik a NULLértéket. A UNIQUE kényszerben részt vevő értékekhez hasonlóan azonban oszloponként csak egy null érték engedélyezett. A UNIQUE kényszerre FOREIGN KEY kényszer hivatkozhat.

Ha UNIQUE korlátozást ad hozzá a tábla egy meglévő oszlopához vagy oszlopához, az adatbázismotor alapértelmezés szerint megvizsgálja az oszlopokban lévő meglévő adatokat, hogy minden érték egyedi legyen. Ha egy UNIQUE kényszert ad hozzá egy ismétlődő értékeket tartalmazó oszlophoz, az adatbázismotor hibát ad vissza, és nem adja hozzá a kényszert.

Az adatbázismotor automatikusan létrehoz egy UNIQUE indexet a UNIQUE korlátozás egyediségi követelményének kikényszerítéséhez. Ezért ha ismétlődő sor beszúrására tesz kísérletet, az adatbázismotor hibaüzenetet ad vissza, amely azt jelzi, hogy a UNIQUE korlátozás megsértődött, és nem adja hozzá a sort a táblához. Ha nincs explicit módon megadva klaszterindex, a rendszer alapértelmezés szerint létrehoz egy egyedi, nem klaszterezett indexet a UNIQUE korlátozás érvényesítésére.

CHECK-korlátozások

CHECK korlátozások kényszerítik a tartomány integritását az egy vagy több oszlop által elfogadott értékek korlátozásával. Bármelyik logikai (Boolean) kifejezéssel létrehozhat CHECK kényszert, amely a logikai operátorok alapján TRUE vagy FALSE eredményez. Egy salary oszlop értéktartománya például korlátozható egy CHECK korlátozás létrehozásával, amely csak a 15 000 és 100 000 ft közötti adatokat teszi lehetővé. Ez megakadályozza, hogy a fizetések a szokásos fizetési tartományon túl legyenek beírva. A logikai kifejezés a következő lenne: salary >= 15000 AND salary <= 100000.

Egyetlen oszlopra több CHECK korlátozást is alkalmazhat. Egyetlen CHECK korlátozást több oszlopra is alkalmazhat, ha a tábla szintjén hozza létre. Egy többoszlopos CHECK kényszer használatával például megerősíthető, hogy a USAcountry_region oszlopértékkel rendelkező összes sornak két karakterből álló értéke is van a state oszlopban. Ez lehetővé teszi, hogy egy helyen több feltétel is be legyen jelölve.

CHECK kényszerek FOREIGN KEY kényszerekhez hasonlóak, mivel az oszlopban lévő értékeket szabályozzák. A különbség az, hogy hogyan határozzák meg, hogy mely értékek érvényesek: FOREIGN KEY kényszerek egy másik táblából szerzik be az érvényes értékek listáját, míg CHECK kényszerek határozzák meg az érvényes értékeket egy logikai kifejezésből.

Vigyázat

Az implicit vagy explicit adattípus-átalakítást tartalmazó korlátozások bizonyos műveletek meghiúsulását okozhatják. A partícióváltás forrásainak minősülő táblákon definiált ilyen korlátozások például egy ALTER TABLE...SWITCH művelet meghiúsulását okozhatják. Kerülje az adattípus-átalakítást a kényszerdefiníciókban.

A CHECK korlátozások korlátozásai

A CHECK korlátozások elutasítják azokat az értékeket, amelyek FALSE-re értékelődnek. Mivel a null értékek ISMERETLEN értéket adnak, a kifejezésekben való jelenlétük felülírhatja a kényszereket. Tegyük fel például, hogy egy int oszlopra MyColumn korlátozást helyez el, amely azt határozza meg, hogy MyColumn csak a 10 (MyColumn=10) értéket tartalmazza. Ha beszúrja a NULL értéket a MyColumn-be, akkor az adatbázismotor beszúrja a NULL-t, és nem ad vissza hibát.

A CHECK kényszer TRUE ad vissza, ha az ellenőrzött feltétel nem FALSE a táblázat egyik sorához sem. A CHECK kényszer a sor szintjén működik. Ha egy létrehozott tábla nem tartalmaz sorokat, a tábla CHECK korlátozása érvényesnek minősül. Ez a helyzet váratlan eredményeket hozhat, ahogyan az alábbi példában is látható.

CREATE TABLE CheckTbl (col1 INT, col2 INT);
GO

CREATE FUNCTION CheckFnctn()
RETURNS INT
AS
BEGIN
    DECLARE @retval INT;
    SELECT @retval = COUNT(*)
    FROM CheckTbl;

    RETURN @retval;
END;
GO

ALTER TABLE CheckTbl ADD CONSTRAINT chkRowCount CHECK (dbo.CheckFnctn() >= 1);
GO

A hozzáadott CHECK korlátozás azt határozza meg, hogy legalább egy sornak kell lennie a CheckTbltáblában. Mivel azonban a táblában nincsenek olyan sorok, amelyek alapján ellenőrizni szeretné ennek a kényszernek a feltételét, a ALTER TABLE utasítás sikeres lesz.

CHECK korlátozások nem lesznek érvényesítve DELETE utasítások során. Ezért a DELETE utasítások bizonyos típusú ellenőrzési korlátozásokkal rendelkező táblákon való végrehajtása váratlan eredményeket eredményezhet. Vegyük például a CheckTbltáblában végrehajtott alábbi utasításokat.

INSERT INTO CheckTbl VALUES (10, 10);
GO
DELETE CheckTbl WHERE col1 = 10;

A DELETE utasítás sikeres, annak ellenére, hogy a CHECK korlátozás azt határozza meg, hogy a tábla CheckTbl legalább 1 sortal kell rendelkeznie.

Jegyzet

Ha a tábla replikációra van közzétéve, a sémaváltoztatásokat a Transact-SQL utasítással kell végrehajtania, az ALTER TABLE vagy az SQL Server Management Objects (SMO) használatával. Ha a sémamódosítások a Táblatervező vagy az Adatbázisdiagram-tervező használatával történnek, a rendszer megpróbálja elvetni és újra létrehozni a táblát. A közzétett objektumokat nem lehet elvetni, ezért a séma módosítása sikertelen lesz.

Feladat Cikk
Leírja, hogyan hozhat létre egyedi korlátozást. Egyedi korlátozások létrehozása
Az egyedi kényszerek módosításának módját ismerteti. Egyedi korlátozások módosítása
Az egyedi kényszerek törlésének módját ismerteti. Egyedi korlátozások törlése
Ez a cikk azt ismerteti, hogyan hozhat létre ellenőrzési kényszert. Ellenőrzési korlátozások létrehozása
Ez a cikk azt ismerteti, hogyan tilthatja le az ellenőrzési kényszert, ha egy replikációs ügynök adatokat szúr be vagy frissít a táblában. Ellenőrzési megszorítások letiltása replikációhoz
Ez a cikk azt ismerteti, hogyan tilthatja le az ellenőrzési korlátozást, amikor adatokat adnak hozzá, frissítenek vagy törölnek egy táblából. Ellenőrző korlátozások letiltása az INSERT és AZ UPDATE utasításokkal
Ismerteti, hogyan módosíthatja a kényszerkifejezést, illetve azokat a beállításokat, amelyek engedélyezik vagy letiltják a korlátozást adott feltételek esetén. Ellenőrzési korlátozások módosítása
Az ellenőrzési kényszer törlésének módját ismerteti. Ellenőrzési korlátozások törlése
Ez a cikk azt ismerteti, hogyan tekintheti meg az ellenőrzési kényszer tulajdonságait. Egyedi korlátozások és korlátozások ellenőrzése