Vytváranie primárnych kľúčov. Obmedzenie PRIMARY KEY Syntax primárneho kľúča

V tomto článku sa pokúsime zvážiť všetko, čo súvisí s kľúčmi SQL: na čo slúži vytváranie a obmedzenia kľúčov? Vo všeobecnosti: bude to nuda 😉

Plán na dnes je:

V teórii relačných databáz - kľúče Sú to určité entity vytvorené na stanovenie určitých obmedzení, ktoré zachovávajú integritu a dostupnosť údajov v databázových tabuľkách.

Jednoducho povedané, kľúče sú in sql sú vytvorené na označenie dodatočných funkcií pre stĺpec. Či už ide o jedinečnosť alebo skutočnosť, že stĺpec odkazuje na inú tabuľku (cudzí kľúč).

Primárny kľúč

Stĺpec, ktorý musí byť v databáze jedinečný, je označený primárnym kľúčom. Primárny kľúč alebo primárny kľúč znamená, že hodnota stĺpca primárneho kľúča sa nemôže v tabuľke opakovať. Tento kľúč vám teda umožňuje jednoznačne identifikovať záznam v tabuľke bez obáv, že sa hodnota stĺpca bude opakovať. Len príklad: povedzme, že máte tabuľku používateľov. Táto tabuľka má tieto polia: celé meno, rok narodenia, telefón. Ako identifikovať používateľa? Parametrom ako celé meno a telefónne číslo nemožno dôverovať. Môžeme mať totiž viacerých používateľov nielen s rovnakým priezviskom, ale aj rovnakým krstným menom. Telefónne číslo sa môže časom meniť a používateľ s telefónnym číslom nemusí byť ten, ktorý je v našej databáze.

To je dôvod, prečo bol vynájdený primárny kľúč. Po priradení jedinečného identifikátora a je to. IN mySql na príklade ktorého vykonávame všetky príklady z terénu AUTO_INCREMENT nemožno nastaviť, pokiaľ neuvediete, že ide o primárny kľúč.

Myslím, že nemá cenu pripomínať, že pole označené ako primárny kľúč nemôže byť pri vytváraní záznamu prázdne.

Cudzí kľúč ( cudzí kľúč)

Je ich viac cudzí kľúč (cudzí kľúč). Nazýva sa aj referencia. Je potrebné prepojiť tabuľky.

Ak sa pozriete na obrázok vyššie, cudzím kľúčom bude pole dodávateľa v tabuľke obuvi. Pri vytváraní tabuľky zvyčajne zadávate stĺpec jedinečných celočíselných hodnôt. Ako sme to urobili, keď sme vytvorili tabuľku dodávateľa

Stĺpec dodávateľ_id bude jedinečný pre každý záznam. Jeho hodnota sa zobrazí v stĺpci dodávateľa v tabuľke topánky. Navrhujem okamžite sa pozrieť na príklad, ako sa vytvára cudzí kľúč.

Vytvorenie cudzieho kľúča

vytvoriť tabuľkové topánky (shoes_id int primárny kľúč auto_increment, text nadpisu, veľkosť int, pohyblivá cena, počet int, typ varchar(30), dodávateľ int, cudzí kľúč (dodávateľ) referencie dodávateľ (id_dodávateľa));

Ako môžete vidieť v príklade vyššie, syntax na vytvorenie cudzieho kľúča je pomerne jednoduchá. Do tabuľky musíte pridať pole a potom toto pole deklarovať ako cudzí kľúč a uviesť, kam bude odkazovať. V tomto prípade pole dodávateľa bude odkazovať na pole dodávateľ_id v tabuľke dodávateľa

Kompozitný kľúč (zložený kľúč)

Pokiaľ ide o zložený kľúč, ide o niekoľko primárnych kľúčov v tabuľke. Teda mať vytvorený kompozitný kľúč, bude jedinečnosť záznamu kontrolovaná poliami, ktoré sú spojené do tohto kľúča.

Sú situácie, keď pri vkladaní do tabuľky potrebujete skontrolovať jedinečnosť záznamu pomocou niekoľkých polí naraz. To je dôvod, prečo bol vynájdený zložený kľúč. Vytvorím si napríklad jednoduchú tabuľku s kompozitný kľúč na zobrazenie syntaxe:

Vytvorenie testu tabuľky (pole_1 int, pole_2 text, pole_3 bigint, primárny kľúč (pole_1, pole_3));

Vo vyššie uvedenom príklade sú dve polia spojené do zloženého kľúča a v tabuľke nebudú žiadne záznamy s týmito identickými poľami.

To je všetko o kľúčoch SQL. Tento malý návod je prípravou na článok, kde sa podrobne pozrieme na to, ako kombinovať tabuľky tak, aby tvorili jednu databázu.

PLATÍ PRE: SQL Server (od roku 2016)Azure SQL DatabázaAzure SQL Data WarehouseParalelný Data Warehouse

Primárny kľúč v SQL Server 2016 môžete definovať pomocou SQL Server Management Studio alebo Transact-SQL. Vytvorením primárneho kľúča sa automaticky vytvorí zodpovedajúci jedinečný klastrovaný alebo nezhlukovaný index.

V tejto sekcii

    Skôr ako začnete, vykonajte nasledujúce kroky.

    Obmedzenia

    Bezpečnosť

    Vytvorte primárny kľúč pomocou:

    SQL Server Management Studio

Obmedzenia

    Tabuľka môže mať len jedno obmedzenie primárneho kľúča.

    Všetky stĺpce s obmedzením PRIMARY KEY musia byť NOT NULL. Ak nie je zadaná možnosť nulovania, potom sa príznak NOT NULL nastaví pre všetky stĺpce s obmedzením PRIMARY KEY.

Bezpečnosť

Povolenia

Vytvorenie novej tabuľky s primárnym kľúčom vyžaduje povolenie CREATE TABLE v databáze a povolenie ALTER pre schému, v ktorej je tabuľka vytvorená.

Vytvorenie primárneho kľúča v existujúcej tabuľke vyžaduje povolenie ALTER v tabuľke.

Vytvorenie primárneho kľúča

    V Prieskumníkovi objektov kliknite pravým tlačidlom myši na tabuľku, do ktorej chcete pridať jedinečné obmedzenie, a vyberte ju Konštruktér.

    IN Návrhár stolov Kliknite na selektor riadkov pre stĺpec databázy, ktorý chcete definovať ako primárny kľúč. Ak chcete vybrať viacero stĺpcov, stlačte a podržte kláves CTRL a kliknite na selektory riadkov pre zostávajúce stĺpce.

    Kliknite pravým tlačidlom myši na výber riadkov stĺpcov a vyberte Nastaviť primárny kľúč.

Stĺpec zdroja kľúča je identifikovaný symbolom primárneho kľúča v príslušnom selektore riadkov.

Ak primárny kľúč pozostáva z viac ako jedného stĺpca, potom môžu byť v jednom stĺpci duplicitné hodnoty, ale všetky kombinácie hodnôt zo všetkých stĺpcov primárneho kľúča musia byť jedinečné.

Keď definujete zložený kľúč, poradie stĺpcov v primárnom kľúči je rovnaké ako poradie stĺpcov v tabuľke. Po vytvorení primárneho kľúča je však možné zmeniť poradie stĺpcov. Ďalšie informácie nájdete v časti .

Vytvorte primárny kľúč na existujúcej tabuľke

    IN Prieskumník objektov

    Vytvorte žiadosť.

    Vykonať. Tento príklad vytvorí primárny kľúč v stĺpci TransactionID.

    POUŽÍVAJTE AdventureWorks2012;Ísť ALTER TABLE Production.TransactionHistoryArchive ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMAR KEY CLUSTERED (TransactionID);Ísť

Vytvorte primárny kľúč v novej tabuľke

    IN Prieskumník objektov Pripojte sa k inštancii databázového stroja.

    Na štandardnom paneli vyberte Vytvorte žiadosť.

    Skopírujte nasledujúci príklad do okna dotazu a kliknite na tlačidlo Vykonať. Tento príklad vytvorí tabuľku a definuje primárny kľúč pre stĺpec TransactionID.

    POUŽÍVAJTE AdventureWorks2012;Ísť CREATE TABLE Production.TransactionHistoryArchive1 (TransactionID int NOT NULL , CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMÁRNY KĽÚČ V KLUSTERE (TransactionID));Ísť

    Ďalšie informácie nájdete v častiach , a .

Predkladám Vám do pozornosti voľný preklad článku SQL pre začiatočníkov 2. časť

Pre každého webového vývojára je dôležité, aby mohol pracovať s databázami. V druhej časti pokračujeme v učení sa jazyka SQL a aplikujte naše zručnosti na DBMS MySQL. Preskúmame indexy, typy údajov a zložitejšie dotazy.

čo potrebuješ

Pozrite si časť „Čo potrebujete“ v prvej časti, ktorá sa nachádza.

Ak chcete tieto príklady spustiť na svojom serveri, postupujte takto:

  1. Otvorte konzolu MySQL a prihláste sa.
  2. Vytvorte databázu "my_first_db" pomocou dotazu VYTVORIŤ, ak ešte nebola vytvorená.
  3. Zmeňte základňu pomocou operátora POUŽÍVAŤ.

Indexy

Indexy (alebo kľúče) sa bežne používajú na zlepšenie rýchlosti vykonávania príkazov, ktoré vyberajú údaje (ako napr VYBRAŤ) z tabuliek.

Sú dôležitou súčasťou dobrej databázovej architektúry, je ťažké ich klasifikovať ako „optimalizáciu“. Indexy sa zvyčajne pridávajú na začiatku, ale môžu sa pridať neskôr pomocou dotazu ALTER TABLE.

Hlavné dôvody indexovania stĺpcov databázy sú:

  • Takmer každá tabuľka má primárny kľúč ( PRIMÁRNY KĽÚČ), zvyčajne je to stĺpec „id“.
  • Ak je stĺpec určený na ukladanie jedinečných hodnôt, musí mať jedinečný index ( UNIKÁTNY).
  • Ak potrebujete časté vyhľadávanie v stĺpci (použitím ho vo vete KDE), musí mať pravidelný index ( INDEX).
  • Ak sa stĺpec používa na spojenie s inou tabuľkou, mal by to byť cudzí kľúč, ak je to možné ( CUDZÍ KĽÚČ) alebo bežný index.

Primárny kľúč (PRIMARY KEY)

Takmer všetky tabuľky majú primárny kľúč, zvyčajne celé číslo s možnosťou automatického zvýšenia ( AUTO_INCREMET).

Poddotazy často spôsobujú výrazné zníženie výkonu, preto ich používajte opatrne.

UNION: Spájanie údajov

Pomocou dotazu UNION, môžete kombinovať výsledky viacerých SELECT dotazov.

Tento príklad kombinuje stavy, ktoré začínajú písmenom „N“ so štátmi s väčším počtom obyvateľov:

(SELECT * FROM uvádza WHERE názov LIKE "n%") UNION (SELECT * FROM uvádza WHERE počet obyvateľov > 10000000);

Upozorňujeme, že New York je veľký štát a začína písmenom „N“. V zozname sa však objaví iba raz, pretože duplikáty sa automaticky odstránia.

Tiež krása žiadostí UNION je, že sa dajú použiť na kombinovanie dopytov proti rôznym tabuľkám.

Napríklad máme tabuľky zamestnanci (zamestnanci), manažéri (manažéri) a zákazníci (klienti). Každá tabuľka má pole s e-mailovou adresou. Ak chceme získať všetky e-mailové adresy v jednej žiadosti, môžeme urobiť nasledovné:

(SELECT email FROM zamestnancov) UNION (SELECT email FROM manažérov) UNION (SELECT email FROM customers WHERE prihlásený = 1);

Vyplnením tejto žiadosti dostaneme poštové adresy všetkých zamestnancov a manažérov a iba tých klientov, ktorí sú prihlásení do zoznamu adries.

INSERT Pokračovanie

O žiadosti sme už hovorili VLOŽIŤ v predchádzajúcom článku. Teraz, keď sme sa pozreli na indexy, môžeme hovoriť o ďalších možnostiach dotazov VLOŽIŤ.

VLOŽTE ... PRI AKTUALIZÁCII DUPLIKÁTOVÉHO KĽÚČA

Toto je najčastejšie používaná podmienka. Najprv sa požiadavka pokúsi vykonať VLOŽIŤ a ak žiadosť zlyhá z dôvodu duplicitného primárneho ( PRIMÁRNY KĽÚČ) alebo jedinečný ( UNIKÁTNY KĽÚČ), potom sa požiadavka vykoná AKTUALIZOVAŤ.

Najprv vytvoríme testovaciu tabuľku.

Toto je stolík na uskladnenie potravín. Pole "sklad" obsahuje počet produktov dostupných na sklade.

Teraz skúsme vložiť existujúcu hodnotu do tabuľky a uvidíme, čo sa stane.

Dostali sme chybu.

Povedzme, že máme novú pekáreň a chceme aktualizovať databázu, ale nevieme, či už je v databáze záznam. Najprv môžeme skontrolovať existenciu záznamu a potom spustiť ďalší dotaz na vloženie. Alebo môžete urobiť všetko v jednom jednoduchom dotaze:

Funguje rovnako ako VLOŽIŤ, ale s jednou dôležitou vlastnosťou. Ak záznam už existuje, vymaže sa a potom sa vykoná dotaz VLOŽIŤ a nebudeme dostávať žiadne chybové hlásenia.

Vezmite prosím na vedomie, pretože Vloží sa úplne nový riadok, pole autoinkrementu sa zväčší o jeden.

Toto je spôsob, ako v prvom rade zabrániť výskytu chýb duplikácie, aby aplikácia zostala v chode. Možno budete musieť vložiť nový riadok bez vytlačenia akýchkoľvek chýb, a to aj v prípade, že dôjde k duplikácii.

Neexistujú žiadne chyby ani aktualizované riadky.

Typy údajov

Každý stĺpec v tabuľke musí byť špecifického typu. Už sme použili typy INT, VARCHAR A DATE, ale podrobne sa nimi nezaoberal. Pozrieme sa aj na niekoľko ďalších typov údajov.

Začnime s číselnými typmi údajov. Rozdeľujem ich do dvoch skupín: celé čísla a zlomky.

Celý

Celočíselný stĺpec môže ukladať iba prirodzené čísla (bez desatinnej čiarky). Štandardne môžu byť kladné alebo záporné. Ak je vybratá možnosť NEPOPÍSANÉ, potom je možné uložiť iba kladné čísla.

MySQL podporuje 5 typov celých čísel rôznych veľkostí a rozsahov:

Zlomkové číselné typy údajov

Tieto typy môžu ukladať zlomkové čísla: FLOAT, DOUBLE a DECIMAL.

FLOAT zaberá 4 bajty, DOUBLE 8 bajtov a je podobný predchádzajúcemu. DOUBLE je presnejší.

DECIMAL(M,N) má premenlivú presnosť. M je maximálny počet číslic, N je počet číslic za desatinnou čiarkou.

Napríklad DECIMAL(13,4) má 9 desatinných miest a 4 desatinné miesta.

Typy údajov reťazca

Už podľa názvu môžete uhádnuť, že môžu ukladať reťazce.

CHAR(N) môže uložiť N znakov a má pevnú hodnotu. Napríklad CHAR(50) musí vždy obsahovať 50 znakov na riadok v celom stĺpci. Maximálna možná hodnota je 255 znakov

VARCHAR(N) funguje rovnako, ale rozsah sa môže líšiť. N - označuje maximálnu hodnotu. Ak je uložený reťazec kratší ako N znakov, zaberie menej miesta na pevnom disku. Maximálna možná hodnota je 65535 znakov.

Pre dlhé reťazce sú vhodnejšie varianty typu TEXT. TEXT má limit 65535 znakov, MEDIUMTEXT má limit 16,7 milióna a LONGTEXT má limit 4,3 miliardy znakov. MySQL ich zvyčajne ukladá v samostatných úložiskách na serveri, aby bolo hlavné úložisko čo najmenšie a najrýchlejšie.

.

Záver

Ďakujem za prečítanie článku. SQL je dôležitý jazyk a nástroj v arzenáli webových vývojárov.

Primárny kľúč je pole v tabuľke, ktoré jednoznačne identifikuje každý riadok/záznam v databázovej tabuľke. Primárne kľúče musia obsahovať jedinečné hodnoty. Stĺpec primárneho kľúča nemôže mať hodnotu.

Tabuľka môže mať iba jeden primárny kľúč, ktorý môže pozostávať z jedného alebo viacerých polí. Ak sa ako primárny kľúč používa viacero polí, nazývajú sa zložený kľúč.

Ak má tabuľka definovaný primárny kľúč v akomkoľvek poli (poliach), nemôžete mať dva záznamy s rovnakou hodnotou pre toto pole (polia).

Poznámka– Tieto koncepty môžete použiť pri vytváraní databázových tabuliek.

Vytvorenie primárneho kľúča

Tu je syntax na definovanie atribútu ID ako primárneho kľúča v tabuľke Zákazníci.

VYTVORIŤ TABUĽKU ZÁKAZNÍCI (ID INT NIE JE NULL, MENO VARCHAR (20) NIE JE NULL, VEK INT NIE JE NULL, ZNAK ADRESY (25) , DESETINNÝ MZD (18, 2), PRIMÁRNY KĽÚČ (ID));

Ak chcete vytvoriť obmedzenie primárneho kľúča v stĺpci "ID", keď tabuľka CUSTOMERS už existuje, použite nasledujúcu syntax SQL:

ZÁKAZNÍCI ALTER TABLE PRIDAJÚ PRIMÁRNY KĽÚČ (ID);

Poznámka

Ak na pridanie primárneho kľúča použijete príkaz ALTER TABLE, stĺpce primárneho kľúča už musia byť deklarované ako neobsahujúce hodnoty NULL (ak bola tabuľka vytvorená ako prvá).

Ak chcete definovať primárny kľúč vo viacerých stĺpcoch, použite nižšie uvedenú syntax SQL:

VYTVORIŤ TABUĽKU ZÁKAZNÍCI (ID INT NIE JE NULL, MENO VARCHAR (20) NIE JE NULL, VEK INT NIE JE NULL, ZNAK ADRESY (25) , DESETINNÝ MZD (18, 2), PRIMÁRNY KĽÚČ (ID, MENO));

Ak chcete vytvoriť obmedzenie primárneho kľúča v stĺpcoch ID a NAME, keď tabuľka CUSTOMERS už existuje, použite nasledujúcu syntax SQL.

ALTER TABLE CUSTOMERS PRIDAŤ OBMEDZENIE PK_CUSTID PRIMÁRNY KĽÚČ (ID, MENO);

Odstránenie primárneho kľúča

Obmedzenia primárneho kľúča môžete z tabuľky vymazať pomocou syntaxe uvedenej nižšie.

ZÁKAZNÍCI ZMENIŤ TABUĽKU PUSTÍ PRIMÁRNY KĽÚČ;

Počas procesu návrhu databázy sa rozhoduje o tom, ktoré tabuľky by mali byť zahrnuté do databázy, aké názvy budú mať (identifikátory), aké typy údajov budú potrebné na zostavenie tabuliek a akí používatelia budú mať prístup ku každej z nich. . Okrem toho, aby ste mohli efektívne vytvárať tabuľky, musíte odpovedať na nasledujúce otázky:

  • Aký typ a veľkosť stĺpcov bude tvoriť každú z tabuliek a aké názvy by ste mali zvoliť pre stĺpce tabuľky?
  • Ktoré stĺpce môžu obsahovať hodnotu NULL?
  • Budú použité? integritné obmedzenia, predvolené hodnoty a pravidlá pre stĺpce?
  • Je potrebné indexovanie stĺpcov, aké typy indexov sa použijú na konkrétne stĺpce?
  • Ktoré stĺpce budú zahrnuté v primárnom a cudzom kľúči.

Na vytvorenie tabuliek v prostredí MS SQL Server použite príkaz:

<определение_таблицы>::= VYTVORIŤ TABUĽKU [ názov_databázy.[vlastník].<элемент_таблицы>| vlastník. ]názov_tabuľky (

<элемент_таблицы> ::= {<определение_столбца>} | <имя_столбца>[,...n])<выражение> | <ограничение_таблицы>

AS

<Выражение>Vlastníkom tabuľky (dbo) je zvyčajne osoba, ktorá ju vytvorila. nastavuje hodnotu pre. vypočítaný stĺpec Vypočítané stĺpce nastavuje hodnotu pre- sú to virtuálne stĺpce, t.j. nie sú fyzicky uložené v tabuľke a počítajú sa pomocou hodnôt stĺpcov tej istej tabuľky. Vo výraze pre vypočítaný stĺpec môžu existovať bežné názvy stĺpcov, konštanty a funkcie viazané jedným alebo viacerými operátormi. Poddotazy sa nemôžu zúčastniť takéhoto výrazu. vypočítaný stĺpec môžu byť zahrnuté do klauzuly SELECT pri zadávaní zoznamu stĺpcov, ktoré sa majú vrátiť ako výsledok dotazu. nemožno zahrnúť do cudzieho kľúča; nepoužívajú sa pre ne predvolené hodnoty. okrem toho vypočítané stĺpce

<определение_столбца>sa nemôže zúčastniť operácií INSERT a DELETE.<тип_данных>::= ( názov_stĺpca<выражение>) [ [ PREDNASTAVENÉ<ограничение_столбца>] | [ IDENTITA (začiatok, krok) ]]] [

][...n]] V definícii stĺpca venujte pozornosť parametru IDENTITY, ktorý udáva, že príslušný stĺpec bude stĺpec počítadla

. Pre jednu tabuľku môže byť definovaný iba jeden stĺpec s touto vlastnosťou. Môžete dodatočne zadať počiatočnú hodnotu a prírastok. Ak tieto hodnoty nie sú špecifikované, obe predvolene sú 1. Ak je s kľúčovým slovom IDENTITY zadané NOT FOR REPLICATION, server nebude automaticky generovať hodnoty pre tento stĺpec, ale umožní vloženie ľubovoľných hodnôt do stĺpec. Použité obmedzenia sú A obmedzenia stĺpcov. Rozdiel medzi nimi je v tom obmedzenie stĺpca sa vzťahuje len na konkrétnu oblasť a tabuľkové obmedzenie- do skupín jedného alebo viacerých polí.

<ограничение_столбца>::= [ názov obmedzenia OBMEDZENIA ] ( [ NULL | NIE JE NULL ] | [ (PRIMÁRNY KĽÚČ | JEDINEČNÝ ) [ KLUSTROVANÝ | NEZAHRNUTÝ ] [ S FILLFACTOR=faktor plnenia ] [ ZAPNUTÝ (názov skupiny súborov | VÝCHOZÍ ) ] ] ] | [ [] CUDZÍ KĽÚČ názov_tabuľky [(názov_stĺpca_gen_tabuľky) ] [ PRI VYMAZANÍ ( KASKÁDOVÁ | BEZ AKCIE ) ] [ PRI AKTUALIZÁCII ( KASKÁDOVÁ | BEZ AKCIE ) ] [ KONTROLA NIE JE NA REPLIKÁCIU ]] |<лог_выражение>) } <ограничение_таблицы>::= ( [ (PRIMÁRNY KĽÚČ | JEDINEČNÝ ) [ KLUSTROVANÝ | NEZAHRNUTÝ ] ((názov_stĺpca [,...n])) ] |CUDZÝ KĽÚČ[(názov_stĺpca [,...n])] REFERENCIE názov_tabuľky [(názov_stĺpca tabuľka_gen [ ,...n])] [ ON DELETE ( CASCADE | NO ACTION ) ] [ ON UPDATE ( CASCADE | NO ACTION ) ] KONTROLA [ NIE JE PRE REPLIKÁCIU ] (logický výraz) |.

Uvažujme jednotlivé parametre prezentovaných štruktúr spojených s obmedzeniami integrita údajov. Obmedzenia integrity majú prednosť pred spúšťačmi, pravidlami a predvolenými hodnotami. TO integritné obmedzenia zahŕňajú obmedzenie primárneho kľúča PRIMÁRNY KĽÚČ obmedzenie cudzieho kľúča CUDZÍ KĽÚČ, obmedzenie UNIQUE, obmedzenie NULL, obmedzenie CHECK.

Obmedzenie primárneho kľúča (PRIMARY KEY)

Tabuľka má zvyčajne stĺpec alebo kombináciu stĺpcov, ktorých hodnoty jedinečne identifikujú každý riadok v tabuľke. Tento stĺpec (alebo stĺpce) sa nazýva primárny kľúč a je potrebný na zabezpečenie jeho integrity. Ak primárny kľúč obsahuje viac ako jeden stĺpec, potom hodnoty v rámci jedného stĺpca môžu byť duplikované, ale akákoľvek kombinácia hodnôt všetkých stĺpcov primárny kľúč musí byť jedinečný.

Pri tvorbe primárny kľúč SQL Server automaticky vytvorí jedinečný index v stĺpcoch, ktoré sú súčasťou primárneho kľúča. Pri použití zrýchľuje prístup k údajom týchto stĺpcov primárny kľúč v žiadostiach.

Tabuľka môže mať iba jedno obmedzenie PRIMARY KEY a žiadny zo stĺpcov zahrnutých v primárnom kľúči nemôže mať hodnotu NULL. Pri pokuse ho použiť ako primárny kľúč stĺpec (alebo skupina stĺpcov), pre ktorý obmedzenia primárneho kľúča sa nevykonajú, primárny kľúč sa nevytvorí a systém zobrazí chybové hlásenie.

Pretože obmedzenie PRIMARY KEY zaisťuje, že údaje sú jedinečné, je často definované ako počítacie stĺpce. Tvorba integritné obmedzenia PRIMÁRNY KĽÚČ je možný počas vytvárania aj vtedy výmena stola. Jedno zo stretnutí primárny kľúč je ustanovenie referenčná integritaúdaje z viacerých tabuliek. Prirodzene, toto je možné implementovať iba definovaním zodpovedajúcich cudzích kľúčov v iných tabuľkách.

ZAHRANIČNÉ KĽÚČOVÉ OBMEDZENIE

Obmedzenie cudzieho kľúča je hlavným mechanizmom udržiavania referenčná integrita medzi tabuľkami v relačnej databáze. Podradený stĺpec tabuľky špecifikovaný ako cudzí kľúč v parametri FOREIGN KEY sa používa na odkazovanie na nadradený stĺpec tabuľky, ktorý sa v ňom nachádza primárny kľúč. Názov nadradenej tabuľky a jej stĺpcov primárny kľúč sú špecifikované v klauzule REFERENCES. Údaje v stĺpcoch definovaných ako cudzí kľúč môžu mať iba rovnaké hodnoty ako tie v stĺpcoch, ktoré sú s nimi spojené primárny kľúč rodičovská tabuľka. Na prepojenie podriadených a rodičovských tabuliek nie je potrebné, aby sa názvy stĺpcov zhodovali. Primárny kľúč môže byť definovaný v stĺpci s jedným názvom, zatiaľ čo stĺpec, ktorý podlieha obmedzeniu FOREIGN KEY, môže mať úplne iný názov. Jedinou požiadavkou je, aby stĺpce zodpovedali typu a veľkosti údajov.

Na primárny kľúč môžu odkazovať nielen stĺpce v iných tabuľkách, ale aj stĺpce umiestnené v rovnakej tabuľke ako samotný primárny kľúč; to vám umožňuje vytvárať rekurzívne štruktúry.

Cudzí kľúč môže byť spojený nielen s primárny kľúčďalší stôl. Môže byť definovaný pre UNIQUE stĺpce druhej tabuľky alebo akékoľvek iné stĺpce, ale tabuľky musia byť v rovnakej databáze.

Stĺpce cudzieho kľúča môžu obsahovať hodnotu NULL, ale kontrola obmedzenia FOREIGN KEY sa ignoruje. Cudzí kľúč je možné indexovať, potom server rýchlejšie nájde potrebné údaje. Cudzí kľúč je definovaný pri vytváraní aj pri prebaľovacie pulty.

Obmedzenie referenčná integritašpecifikuje požiadavku, že pre každý záznam v podradenej tabuľke musí existovať záznam v nadradenej tabuľke. V tomto prípade je zablokovaná zmena hodnoty stĺpca vzťahu v zázname nadradenej tabuľky za prítomnosti podradeného záznamu, ako aj vymazanie nadradeného záznamu (zákaz kaskádových zmien a vymazaní), čo je štandardne garantované ON DELETE NO ACTION a ON UPDATE NO ACTION parametre. Ak chcete povoliť kaskádové efekty, použite parametre ON DELETE CASCADE a ON UPDATE CASCADE.