Úvod do cudzieho kľúča v SQL
Cudzí kľúč je obmedzením v SQL. Používa sa na prepojenie oboch tabuliek. Cudzí kľúč v jednej tabuľke ukazuje na primárny kľúč v inej tabuľke. Cudzí kľúč možno použiť na uistenie, že riadok v jednej tabuľke má zodpovedajúce riadky / riadky v inej tabuľke. Odkazovaná tabuľka sa nazýva nadradená tabuľka a tabuľka s cudzím kľúčom sa nazýva dcérska tabuľka. Tento vzťah rodič - dieťa presadzuje pravidlo známe ako referenčná integrita. Referenčná integrita je vlastnosť údajov, ktorá uvádza, že všetky jej odkazy sú platné.
Takže, ak máte v databáze 1-to-many alebo mnoho-to-many vzťahy, cudzie kľúče budú veľmi užitočné. Funguje ako krížový odkaz medzi dvoma tabuľkami (parent_table a child_table), pretože odkazuje na primárny kľúč inej tabuľky. Takto sa vytvorí spojenie medzi parent_table a child_table.
syntax
Vytvorenie novej tabuľky pomocou cudzieho kľúča vyžaduje povolenie CREATE TABLE v databáze
CREATE TABLE child_Table
(
column_1 datatype ( NULL |NOT NULL ),
column_2 datatype ( NULL |NOT NULL ),
…
CONSTRAINT F_key
FOREIGN KEY (child_column1, child_column2, … child_column_n)
REFERENCES parent_Table (parent_column1, parent_column2, … parent_column_n)
( ON DELETE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) ( ON UPDATE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) );
- Child_Table je názov tabuľky, ktorú vytvoríme
- column_1, column_2- stĺpce, ktoré sa majú pridať do tabuľky.
- F_key- Toto je obmedzenie cudzieho kľúča.
- child_column1, child_column2… child_column_n- Je to názov stĺpca child_Table, ktorý odkazuje na primárny kľúč v nadradenej tabuľke.
- Parent_Table - Toto je názov parent_table. Primárny kľúč parent_table je uvedený v child_table
- ZMAZAŤ - Tento parameter vykoná akciu s podradenými údajmi po vymazaní rodičovských údajov. SET NULL, NO ACTION, CASCADE, SET DEFAULT sú niektoré z hodnôt tohto parametra.
- ON UPDATE - Toto je voliteľný parameter, ktorý po aktualizácii rodičovských údajov vykoná akciu s podradenými údajmi. SET NULL, NO ACTION, CASCADE, SET DEFAULT sú niektoré z hodnôt tohto parametra.
- CASCADE - Toto môžeme použiť spolu s ON DELETE a ON UPDATE. Po odstránení alebo aktualizácii nadradených údajov Podradené údaje budú buď odstránené, alebo aktualizované.
Vytvorenie cudzieho kľúča v existujúcej tabuľke vyžaduje ALTER povolenie pre tabuľku.
ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)
pravidlá
- Cudzie kľúče sa nevzťahujú na dočasné tabuľky.
- Obmedzenie cudzieho kľúča nemusí byť spojené iba s primárnym kľúčom inej tabuľky, môže byť tiež spojené s obmedzeniami UNIQUE inej tabuľky.
- Obmedzenia FOREIGN KEY môžu odkazovať na iný stĺpec v tej istej tabuľke. Toto sa označuje ako samoreferencia.
- Obmedzenia cudzieho kľúča sa môžu odvolávať na tabuľky v tej istej databáze.
- Do podradenej tabuľky môžeme vložiť aj NULL hodnoty.
- Keď do obmedzenia cudzieho kľúča vložíme inú hodnotu ako NULL, hodnota musí existovať v odkazovanom stĺpci, inak došlo k porušeniu správy.
- Hodnota jedinečných kľúčov rodiča sa nedá zmeniť, ak je pravidlo aktualizácie RESTRICT a ak existuje jeden alebo viac závislých riadkov. Ak však pravidlo aktualizácie NIE JE AKCIA, rodičovské jedinečné kľúče sa môžu aktualizovať, pokiaľ má každé dieťa rodičovský kľúč v čase, keď sa dokončí aktualizačný príkaz.
Príklady
Povedzme, že máme dve tabuľky Zákazníci a Objednávky. Tabuľka Zákazníci obsahuje všetky údaje týkajúce sa zákazníkov a Tabuľka Objednávky obsahuje údaje týkajúce sa zákaziek.
zákazníci
Cust_id | Primárny kľúč |
cust_name | |
umiestnenia |
objednávky
Číslo objednávky | Primárny kľúč |
Dátum objednávky | |
množstvo | |
Cust_id | Cudzí kľúč |
Celková suma |
Vo vyššie uvedenom príklade je stĺpec Cust_id v tabuľke ORDERS cudzí kľúč ukazujúci na stĺpec Cust_id v tabuľke ZÁKAZNÍCI.
Predpokladajme, že tieto tabuľky majú nasledujúce hodnoty
zákazníci
1001 | alex | US |
1002 | Carey | US |
1003 | sid | Spojené kráľovstvo |
1004 | Tomáš | AUS |
1005 | Kapil | IND |
objednávky
78 | 20-10-2018 | 5 | 1002 | 1200 |
79 | 12.10.2017 | 4 | 1001 | 800 |
80 | 20-11-2016 | 2 | 1005 | 369 |
81 | 09.10.2016 | 5 | 1002 | 258 |
82 | 19-08-2016 | 11 | 1004 | 1900 |
83 | 30-06-2016 | 45 | 1001 | 2300 |
84 | 16-02-2016 | 7 | 1001 | 890 |
85 | 2.1.2016 | 2 | 1002 | 260 |
Pre cust_id 1001 existujú tri objednávky, ktoré existujú v tabuľke objednávok.
Pre cust_id 1003 neexistuje žiadna objednávka.
Ak teda máme v nadradenej tabuľke konkrétne údaje (povedzme 1003), nie je potrebné mať tieto údaje v podradenej tabuľke, ale naopak to nie je pravda.
V podradenej tabuľke (tabuľka objednávok) nemôžeme mať žiadne údaje, ktoré v nadradenej tabuľke (zákazníci) neexistujú.
Napríklad nemôžeme vložiť nový záznam povedať pre cust_id 1006 v tabuľke Orders, pretože cust_id 1006 neexistuje v tabuľke Customers.
Nižšie sú uvedené príklady, ktoré porušujú referenčnú integritu tohto vzťahu:
- Vloženie riadku do tabuľky ORDERS, kde sa Cust_ID neobjaví v stĺpci Cust_ID v tabuľke CUSTOMERS.
- Vymazanie riadku z tabuľky CUSTOMERS, kde Cust_ID riadku, ktorý sa má odstrániť, je stále prítomné v stĺpci Cust_ID v tabuľke ORDERS.
Keď je konkrétny záznam vymazaný z hlavnej tabuľky, existujú dva spôsoby, ako zachovať integritu údajov v podradenej tabuľke. Ak sú dve tabuľky spojené s cudzím kľúčom a niektoré údaje v hlavnej tabuľke sa vymažú, pre ktoré existuje aj záznam v podradenej tabuľke, máme určitý mechanizmus na uloženie integrity údajov do podradenej tabuľky.
- On Delete Cascade : Odstráni sa záznam z podradenej tabuľky, ak sa táto hodnota cudzieho kľúča odstráni z hlavnej tabuľky.
- On Delete NULL: Vymaže všetky hodnoty v tomto zázname podradenej tabuľky ako NULL, pre ktoré sa hodnota cudzieho kľúča z hlavnej tabuľky vymaže.
Záver - Cudzí kľúč v SQL
Preto je vhodné použiť cudzí kľúč v databáze, ktorá má jeden až jeden alebo viac vzťahov. Hlavnou výhodou použitia obmedzení cudzím kľúčom je to, že zvyšuje výkon. Vývojári môžu ľahko identifikovať štruktúru databázy. Môžeme tiež preskúmať, ako bude dotaz získavať údaje.
Odporúčané články
Toto je príručka pre cudzí kľúč v SQL. Tu diskutujeme pravidlá a príklady cudzieho kľúča v SQL so syntaxou. Ďalšie informácie nájdete aj v nasledujúcich článkoch -
- Zobrazenia SQL
- Typy pripojení na serveri SQL Server
- Čo je PL / SQL?
- Obmedzenia servera SQL
- Top 6 typov spojení v MySQL s príkladmi