Klauzula CONSTRAINT

obmedzenie je podobné ako index, môže sa však použiť aj na vytvorenie vzťah s inou tabuľkou.

Na vytvorenie alebo odstránenie obmedzení použijete klauzulu CONSTRAINT v príkazoch ALTER TABLE a CREATE TABLE. Existujú dva typy klauzúl CONSTRAINT: jedna na vytvorenie obmedzenia v jednom poli a druhá na vytvorenie obmedzenia na viac ako jedno pole.

Poznámka: Databázový stroj aplikácie Microsoft Access nepodporuje používanie klauzuly CONSTRAINT alebo ľubovoľných príkazov jazyka definície údajov s databázami iných aplikácií ako je Microsoft Access. Namiesto toho použite metódy DAO Create.

Syntax

Obmedzenie jedného poľa:

CONSTRAINT názov {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES cudziatabuľka [(cudzie pole1, cudzie pole2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Obmedzenie viacerých polí:

CONSTRAINT názov
{PRIMARY KEY (primárny1[, primárny2 [, ...]]) |
UNIQUE (jedinečné1[, jedinečné2 [, ...]]) |
NOT NULL (nenulové1[, nenulové2 [, ...]]) |
FOREIGN KEY [NO INDEX] (odk1[, odk2 [, ...]]) REFERENCES cudziatabuľka [(cudziepole1 [, cudziepole2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Klauzula CONSTRAINT obsahuje tieto časti:

Časť

Popis

názov

Názov obmedzenia, ktoré sa vytvorí.

primárny1, primárny2

Názov poľa alebo polí, ktoré označujú primárny kľúč.

jedinečné1, jedinečné2

Názov poľa alebo polí, ktoré sa majú označiť ako jedinečný kľúč.

nenulové1, nenulové2

Názov poľa alebo polí, ktoré sú obmedzené na iné hodnoty než Null.

odk1, odk2

Názov poľa alebo polí cudzieho kľúča, ktoré odkazujú na polia v inej tabuľke.

cudziatabuľka

Názov cudzej tabuľky, ktorá obsahuje pole alebo polia vybratými položkou cudziepole.

cudzie pole1, cudzie pole2

Názov poľa alebo polí v tabuľke cudziatabuľka špecifikované odkazmi odk1, odk2. Ak odkazované pole je primárny kľúč tabuľky cudziatabuľka, túto klauzulu môžete vynechať.


Poznámky

Syntax obmedzenia jedného poľa používate v klauzule definície poľa príkazu ALTER TABLE alebo CREATE TABLE bezprostredne po špecifikácii typu údajov poľa.

Syntax viacpoľového obmedzenia používate vždy, keď použijete vyhradené slovo klauzulu CONSTRAINT mimo klauzuly definície poľa v príkaze ALTER TABLE alebo CREATE TABLE.

Pomocou klauzuly CONSTRAINT môžete určiť pole ako jedno z nasledujúcich typov obmedzení:

  • Môžete použiť vyhradené slovo UNIQUE na označenie poľa ako jedinečného. To znamená, že v tomto poli nemôžu mať rovnakú hodnotu žiadne dva záznamy v tabuľke. Môžete obmedziť ľubovoľné pole alebo zoznam polí na jedinečné. Ak je viacpoľové obmedzenie označené ako jedinečný kľúč, kombinované hodnoty všetkých polí v indexe musia byť jedinečné, aj keď dva alebo viac záznamov má rovnakú hodnotu iba v jednom z polí.

  • Vyhradené slová PRIMARY KEY môžete použiť na označenie jedného poľa alebo množiny polí v tabuľke ako primárneho kľúča. Všetky hodnoty v primárnom kľúči musia byť jedinečné a nie Null a tabuľka môže mať len jeden primárny kľúč.

    Poznámka: Nenastavujte obmedzenie PRIMARY KEY v tabuľke, ktorá už primárny kľúč obsahuje. Ak to urobíte, zobrazí sa chyba.

  • Vyhradené slová FOREIGN KEY môžete použiť na označenie poľa ako cudzieho kľúča. Ak primárny kľúč cudzej tabuľky pozostáva z viac ako jedného poľa, musíte použiť definíciu obmedzenia viacerých polí obsahujúcu všetky odkazované polia, názov cudzej tabuľky a názvy odkazovaných polí v cudzej tabuľke v rovnakom poradí, v akom sú uvedené odkazované polia. Ak je odkazované pole alebo polia primárnym kľúčom cudzej tabuľky, nemusíte určovať odkazované polia. V predvolenom nastavení sa databázový stroj správa tak, ako keby primárny kľúč cudzej tabuľky tvoril odkazované polia.

    Obmedzenia cudzích kľúčov definujú konkrétne akcie, ktoré sa majú vykonať po zmene zodpovedajúcej hodnoty primárneho kľúča:

  • Môžete určiť akcie, ktoré sa majú vykonať v cudzej tabuľke na základe zodpovedajúcej akcie vykonanej na primárnom kľúči v tabuľke, na ktorej je definovaná klauzula CONSTRAINT. Zvážte napríklad nasledujúcu definíciu tabuľky Zákazníci:

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Zvážte túto definíciu tabuľky Objednávky, ktorá definuje vzťah cudzieho kľúča, ktorý odkazuje na primárny kľúč tabuľky Zákazníci:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

Na cudzom kľúči sú definované klauzuly ON UPDATE CASCADE a ON DELETE CASCADE. Klauzula ON UPDATE CASCADE znamená, že ak sa v tabuľke Zákazníci aktualizuje identifikácia zákazníka (CustId), aktualizácia bude kaskádovaná prostredníctvom tabuľky Objednávky. Každý príkaz, ktorý obsahuje zodpovedajúcu hodnotu identifikácie zákazníka sa automaticky aktualizuje na novú hodnotu. Klauzula ON DELETE CASCADE znamená, že ak sa zákazník odstráni z tabuľky Zákazníci, všetky riadky v tabuľke Objednávky obsahujúce rovnakú hodnotu identifikácie zákazníka sa tiež odstránia.

Zvážte túto odlišnú definíciu tabuľky Objednávky pomocou akcie SET NULL namiesto akcie CASCADE:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

Klauzula ON UPDATE SET NULL znamená, že ak sa identifikácia zákazníka (CustId) aktualizuje v tabuľke Zákazníci, zodpovedajúce hodnoty cudzieho kľúča v tabuľke Objednávky sa automaticky nastavia na hodnotu NULL. Podobne klauzula ON DELETE SET NULLL znamená, že ak sa zákazník odstráni z tabuľky Zákazníci, všetky zodpovedajúce hodnoty cudzieho kľúča v tabuľke Objednávky sa automaticky nastavia na hodnotu NULL.

Ak chcete zabrániť v automatickom vytváraní indexov pre cudzie kľúče, môžete použiť modifikátor NO INDEX. Táto forma definície cudzieho kľúča by sa mala použiť len v prípadoch, kde by boli výsledné hodnoty indexu často duplicitné. Tam, kde sa hodnoty v indexe cudzích kľúčov často duplikujú, môže byť použitie indexu menej efektívne ako skenovanie tabuľky. Udržiavanie tohto typu indexu s vloženými a odstránenými riadkami z tabuľky znižuje výkonnosť a neposkytuje žiadne výhody.



Rozšírte svoje zručnosti práce s balíkom Office
Preskúmať školenie
Buďte medzi prvými, ktorí získajú nové funkcie
Pridajte sa k insiderom pre Office

Boli tieto informácie užitočné?

Ďakujeme za vaše pripomienky!

Ďakujeme vám za pripomienky. Pravdepodobne vám pomôže, ak vás spojíme s pracovníkom podpory pre Office.

×