SQLShack (Čeština)

0 Comments

V předchozím článku Běžně používá SQL Server Omezení: not NULL, UNIQUE a PRIMARY KEY, které jsme popsali, v detailu, první tři typy SQL Server omezení; NENÍ NULL, UNIKÁTNÍ a PRIMÁRNÍ KLÍČ. V tomto článku budeme diskutovat o dalších třech omezeních; cizí klíč, kontrola a výchozí popisem každého z nich stručně a poskytnutím praktických příkladů.,

omezení cizího klíče

cizí klíč je databázový klíč, který se používá k propojení dvou tabulek dohromady. CIZÍ KLÍČ omezení identifikuje vztahy mezi tabulkami databáze tím, že odkazování na sloupec nebo sada sloupců, v podřízené tabulce, která obsahuje cizí klíč, PRIMÁRNÍ KLÍČ sloupec nebo sada sloupců, v Nadřazené tabulce.

vztah mezi dítětem a rodičem tabulky je udržována kontrola existence dítěte tabulka CIZÍ KLÍČ hodnoty v odkazované nadřazené tabulky PRIMÁRNÍ KLÍČ před vložením těchto hodnot do podřízené tabulky., Tímto způsobem bude omezení cizího klíče v dětské tabulce, která odkazuje na primární klíč v nadřazené tabulce, prosazovat referenční integritu databáze. Referenční integrita zajišťuje zachování vztahu mezi databázovými tabulkami během procesu vkládání dat. Připomeňme, že PRIMÁRNÍ KLÍČ omezení zaručuje, že žádné NEPLATNÉ nebo duplicitní hodnoty pro vybraný sloupec nebo sloupce budou vloženy do stolu, prosazování integrity subjektu pro tuto tabulku., Integrita entity vynucená primárním klíčem a referenční integrita vynucená cizím klíčem společně tvoří klíčovou integritu.

CIZÍ KLÍČ omezení se liší od omezení PRIMÁRNÍHO KLÍČE v tom, že můžete vytvořit pouze jeden PRIMÁRNÍ KLÍČ za každého stolu, s možností vytvořit více omezení CIZÍHO KLÍČE v každé tabulce odkazující více nadřazené tabulky. Dalším rozdílem je, že cizí klíč umožňuje vkládání nulových hodnot, pokud na tomto klíči není definováno nulové omezení, ale primární klíč nepřijímá NULLs.,

omezení cizího klíče vám také umožňuje kontrolovat, jaká akce bude provedena, když je referenční hodnota v nadřazené tabulce aktualizována nebo smazána pomocí doložek ON UPDATE A on DELETE. Podporovaná opatření, která mohou být přijata při mazání nebo aktualizaci nadřazené tabulky hodnoty patří:

  • ŽÁDNÁ AKCE: Pokud při AKTUALIZACI nebo ODSTRANIT doložky jsou nastaveny tak, aby ŽÁDNÁ AKCE, provedené aktualizace nebo odstranění operace v nadřazené tabulka se nezdaří s chybou.,
  • CASCADE: nastavení klauzulí ON UPDATE nebo on DELETE na kaskádu Se stejná akce provedená na odkazovaných hodnotách nadřazené tabulky projeví na souvisejících hodnotách v podřízené tabulce. Pokud je například odkazovaná hodnota v nadřazené tabulce odstraněna, všechny související řádky v podřízené tabulce jsou také smazány.
  • SET NULL: s touto volbou při aktualizaci a při Možnosti odstranit klauzule, Pokud jsou odkazované hodnoty v nadřazené tabulce odstraněny nebo změněny, jsou všechny související hodnoty v podřízené tabulce nastaveny na hodnotu NULL.,
  • NASTAVIT jako VÝCHOZÍ: Pomocí NASTAVTE VÝCHOZÍ možnosti ON UPDATE a ON DELETE ustanovení stanoví, že, pokud odkazované hodnoty v nadřazené tabulce jsou aktualizovány nebo odstraněny, související hodnoty v podřízené tabulce CIZÍ KLÍČ sloupce bude nastavena na výchozí hodnotu.

můžete přidat CIZÍ KLÍČ omezení při definování sloupců pomocí příkazu CREATE TABLE T-SQL, nebo jej přidat po vytvoření tabulky pomocí ALTER TABLE T-SQL. Vytvoříme dvě nové tabulky pro pochopení funkce omezení cizího klíče., První tabulka bude fungovat jako nadřazená tabulka se sloupcem ID definovaným jako sloupec primárního klíče. Druhá tabulka bude fungovat jako dětská tabulka, přičemž sloupec ID je definován jako sloupec cizího klíče, který odkazuje na sloupec ID v nadřazené tabulce.,> ID INT PRIMARY KEY,

Název VARCHAR(50) NULL
)
VYTVOŘIT TABULKU ConstraintDemoChild
(
CID INT, PRIMÁRNÍ KLÍČ,
ID INT, CIZÍ KLÍČ ODKAZUJE ConstraintDemoParent(ID)
)

Po vytvoření dvou tabulek, budeme-li vložit tři záznamy do nadřazené tabulky, a dva záznamy o dítěti, tabulky, pomocí následující příkazy INSERT:

výsledek vám ukáže, že tři záznamy jsou úspěšně vložen do nadřazené tabulky., První záznam, který jsme se pokusili vložit do tabulky dítě, je vložen bez chyby, protože hodnota ID 1 již existuje v nadřazené tabulce.,protože ID hodnotu 4, neexistuje v nadřazené tabulce, a z důvodu omezení CIZÍHO KLÍČE, nebudete moci vložit hodnotu ID pro podřízené tabulky, která neexistuje v nadřazené tabulce:

Kontrola nadřazené a podřízené tabulky obsahu, uvidíte, že pouze jeden záznam se vloží do podřízené tabulky, jak můžete vidět níže:

Jak jsme se nezmínil o omezení CIZÍHO KLÍČE název při vytváření podřízené tabulky, SQL Server přiřadí jedinečný název, který můžeme získat z 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
PŘIDAT OMEZENÍ FK__ConstraintDe__ID
, FOREIGN KEY (ID) ODKAZY ConstraintDemoParent(ID);

operace se nezdaří jako ID hodnota 4 neexistuje v nadřazené tabulce a rozbije referenční integritu mezi dítětem a rodičem tabulek, jak je vidět na následující chybová zpráva:

být schopen vytvořit CIZÍ KLÍČ omezení v podřízené tabulce, které musíme eliminovat konflikt první odstraněním nebo aktualizaci záznamu., Here we will try to modify the ID value with the following UPDATE command:

1
2
3

UPDATE ., NASTAVTE ID =2, KDE ID = 4

CIZÍ KLÍČ omezení bude vytvořen úspěšně bez chyby, jak je uvedeno níže:

CIZÍ KLÍČ omezení může být definován pomocí serveru SQL Server Management Studio nástroj. Klepněte pravým tlačítkem myši na požadovanou tabulku a vyberte možnost návrh.,> Zobrazí okno, můžete jednoduše zadat název omezení CIZÍHO KLÍČE, tabulky a sloupce, které se budou podílet v té souvislosti, kliknutím na Tabulky A Sloupce Specifikace, pokud kontrola stávajících údajů je nutný, a konečně akce provádí, když je odkazovaný záznam je vymazán nebo změněn na nadřazené tabulky, jak je uvedeno níže:

ZKONTROLUJTE, zda Omezení

ZKONTROLUJTE, zda omezení je definován na sloupec nebo sadu sloupců omezit rozsah hodnot, které mohou být vloženy do těchto sloupců, pomocí předem definovaného stavu., Kontrolní omezení přichází do akce pro vyhodnocení vložených nebo upravených hodnot, kde bude do tabulky vložena hodnota, která splňuje podmínku, jinak bude operace vložení vyřazena. Je povoleno zadat více kontrolních omezení pro stejný sloupec.

Definování ZKONTROLUJTE, zda omezení, podmínkou je nějak podobné psaní klauzuli where dotazu, používat různé operátory porovnání, jako jsou A, NEBO, MEZI, V, JAKO je a JE NULL psát jeho Logický výraz, který vrátí TRUE, FALSE nebo UNKNOWN., Omezení kontroly vrátí neznámou hodnotu, pokud je ve stavu přítomna nulová hodnota. Omezení kontroly se používá hlavně k vynucení integrity domény omezením vložených hodnot na hodnoty, které se řídí definovanými hodnotami, rozsahem nebo pravidly formátu.

vytvořme novou jednoduchou tabulku, která má tři sloupce; sloupec ID, který je považován za primární klíč této tabulky, jména a platu. Ve sloupci plat je definováno omezení kontroly, aby se zajistilo, že do tohoto sloupce nebudou vloženy žádné nulové nebo záporné hodnoty.,v>6

7
8
9
VYTVOŘIT TABULKU ConstraintDemo4
(
ID INT PRIMARY KEY,
Název VARCHAR(50) NULL,
Plat INT CHECK (Plat>0)
)

Pokud provedete níže uvedené tři příkazy INSERT:

je zřejmé z vygenerovaný výsledek, že první záznam je vložena žádná chyba jako předpokladu Plat hodnotu splňuje kontrola stavu.,rovided Plat hodnoty nesplňují omezení CHECK stavu v důsledku vložení nulové a záporné Mzdy hodnot, jak můžete vidět v následující chybová zpráva:

Kontrola tabulky dat ukazuje, že pouze první řádek, který prošel ZKONTROLUJTE, zda omezení, podmínkou bude vložen do tabulky, jak je uvedeno níže:

Jsme se zmínili dříve v tomto článku, že CHECK omezení umožňuje vložení hodnoty NULL, pokud se zúčastnilo sloupce umožňují NULL a hodnoty NULL bude vyhodnocena jako NEZNÁMÁ, aniž házet žádné chyby., To je zřejmé z níže záznam, který je vložen úspěšně, i když za předpokladu, hodnota Plat sloupec je NULL:

Pokud jste recenzi omezení CHECK definice v předchozím příkazu CREATE TABLE, uvidíte, že jsme neuvedli jméno definované omezení. V tomto případě SQL Server přiřadí jedinečné jméno pro toto omezení, které lze zobrazit dotazem na INFORMATION_SCHEMA.Zobrazení systému TABLE_CONSTRAINTS pro tabulku ConstraintDemo4., Výsledek bude následující:

omezení kontroly lze zrušit pomocí příkazu ALTER TABLE T-SQL.,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., To je způsobeno tím, že, zatímco SQL Server je kontrola již existujících dat pro omezení CHECK stavu, jeden nebo více hodnot, které nesplňují omezení stavu se nacházejí, jak můžete vidět v následující chybová zpráva:

být schopen definovat ZKONTROLUJTE, zda omezení, znovu, měli bychom upravit nebo odstranit data, která brání omezení ze je vytvořeno.,de484761″>

1
2
3
AKTUALIZACE ConstraintDemo4 SET Plat =300 where ID IN (2,3)

Nyní, ZKONTROLUJTE, zda omezení, mohou být definovány bez problému, jak je uvedeno níže:

SQL Server umožňuje zakázat omezení CHECK pro zvláštní případy, jako je vkládání velkého množství dat, aniž by se starat o setkání omezení stavu pro účely testování, nebo kvůli změně v obchodní logiky., Tento případ platí pouze pro omezení šeků a cizích klíčů, které můžete dočasně zakázat.,riting omezení název, stejně jako v T-SQL příkaz níže:

1
2
3

ALTER TABLE ConstraintDemo4 NOCHECK CONSTRAINT

ZKONTROLUJTE, zda omezení, definice, můžete určit, že omezení bude vytvořen bez kontroly existující řádky, ale omezení bude označen jako důvěryhodný., můžete zapnout všechny kontrolní omezení, všechny najednou,pomocí T-SQL příkaz níže:

1
2
3

ALTER TABLE ConstraintDemo4 ZKONTROLUJTE, zda OMEZENÍ, VŠECHNY

a Zároveň umožňuje předchozí ZKONTROLUJTE, zda omezení, uvidíte, že SQL Server bude stěžovat na nekontrolovaná data, která poruší omezení stavu., V tomto případě není zachována integrita domény dat.

tento problém vyřešit, DBCC CHECKCONSTRAINTS příkaz může být snadno použit k identifikaci dat, která porušuje omezení stavu v zadané tabulce nebo omezení, s přihlédnutím ne spustit tento příkaz ve špičce, jak to bude mít vliv na výkon serveru SQL Server není vzhledem k použití snímek databáze.,v id=“ff419aa09d“>

1
2
3

DBCC CHECKCONSTRAINTS(ConstraintDemo4)

výsledek vám ukáže dvě Platu hodnoty, které rozkládají omezení CHECK stavu, jak je uvedeno níže:

ZKONTROLUJTE, zda omezení, může být také vytvořen pomocí SQL Server Management Studio nástroj, kliknutím pravým tlačítkem myši na požadované tabulky a výběrem možnosti Designu., V zobrazeném okně Návrhu, klepněte pravým tlačítkem myši a zvolte Zkontrolujte Omezení možnosti takto:

Od Check Omezení, okno, můžete určit ZKONTROLUJTE, zda omezení, název, výraz a pokud kontrola stávajících údajů je nutné, jak je uvedeno níže:

VÝCHOZÍ Omezení

VÝCHOZÍ omezení se používá k poskytnout výchozí hodnotu sloupce pro vložené řádky, pokud není zadána žádná hodnota pro tento sloupec INSERT., Výchozí omezení pomáhá při zachování integrity domény tím, že poskytuje správné hodnoty pro sloupec, v případě, že uživatel neposkytuje hodnotu pro něj. Výchozí hodnotou může být konstantní hodnota, hodnota systémové funkce nebo NULL.,elow:

1
2
3
4

ALTER TABLE ConstraintDemo5
Přidat Omezení DF__Omezovat__Emplo DEFAULT (GETDATE()) PRO EmployeeDate

Také, VÝCHOZÍ omezení může být definován pomocí serveru SQL Server Management Studio, kliknutím pravým tlačítkem myši na požadovanou tabulku a vyberte volbu Designu., Pak vyberte sloupec, který bude přiřadit výchozí hodnotu pro procházení Vlastnosti Sloupce okno jak je uvedeno níže:

jsem doufal, že tento článek, a předchozí, pomohly vysvětlit šest SQL Server typy omezení. Neváhejte se zeptat na jakékoli dotazy v komentářích níže.,ouze používá SQL Server Omezení: not NULL, UNIKÁTNÍ a PRIMÁRNÍ KLÍČ

Užitečné odkazy

  • Vytvořit kontrolní Omezení
  • Omezení
  • Výchozí
  • Vytvořit Cizí Klíč Vztahy
  • ZKONTROLUJTE, zda Omezení

  • Autora
  • Poslední Příspěvky
Ahmad Yaseen je Microsoft Velký Datový inženýr se znalostmi a zkušenostmi s SQL, BI, SQL Server, Správa Databáze a Rozvoje oblasti.,
je Microsoft Certified Solution Expert na Správu Dat a Analytics, Microsoft Certified Solution Associate v SQL Databáze Správa a Vývoj, Azure Developer partner a Microsoft Certified Trainer.
také přispívá svými tipy SQL v mnoha blogech.,
Zobrazit všechny příspěvky od Ahmad Yaseen

Nejnovější příspěvky od Ahmad Yaseen (zobrazit všechny)
  • Jak sledovat Azure Data Factory – 15. ledna 2021
  • Pomocí Ovládání Zdroje v Azure Data Factory – 12. ledna, 2021
  • Pomocí Šablony v Azure Data Factory – 8. ledna 2021


Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *