basics mysql foreign key constraint with examples
Tento tutoriál vysvetľuje základy obmedzenia MySQL FOREIGN KEY, ako je napríklad jeho syntax, ako ho pridať, deklarovať, zrušiť a zmeniť pomocou príkladov:
Zjednodušene povedané sa FOREIGN KEY používa na prepojenie dvoch alebo viacerých tabuliek v MySQL.
Aby bolo možné vyhľadávať a aktualizovať rôzne typy údajov v rôznych časových okamihoch, je potrebné pripojiť tabuľky MySQL. Preto je nevyhnutné mať spojovací bod medzi 2 tabuľkami.
V tomto výučbe sa budeme zaoberať rôznymi spôsobmi použitia cudzích kľúčov a tým, ako je možné ich deklarovať a meniť a aké obmedzenia má z hľadiska celkovej štruktúry tabuľky.
Čo sa dozviete:
ZAHRANIČNÝ KLÍČ MySQL
Syntax:
CONSTRAINT {constraintName} FOREIGN KEY (referringColumnName) REFERENCES {referredTable}({referredColumn}) ON UPDATE {reference-option} ON DELETE {reference-option}
Vyššie je uvedená syntax použitá pri zadávaní FOREIGN KEY oproti tabuľke pri jej vytváraní alebo pri vytváraní tabuľky Vyhlásenie ALTER TABLE.
Poďme pochopiť rôzne komponenty syntaxe:
- meno konstanta: Toto je symbolické meno, ktoré chceme definovať pre špecifikované obmedzenie FK. Ak sa to preskočí, potom MySQL engine automaticky priradí názov obmedzenia FK.
- referringColumnName: Toto je stĺpec, ktorý odkazuje na hodnoty v inej tabuľke, ako ich určuje stĺpec v odkazovanej tabuľke.
- Doporučená tabuľka / nadradená tabuľka: Týka sa to názvu tabuľky, z ktorej by sa hodnoty odkázali.
- Odporúčaný stĺpec: Názov stĺpca v odkazovanej tabuľke.
- Referenčná možnosť: Jedná sa o akcie, ktoré sa prejavia v obraze, keď sa v tabuľke, ktorá obsahuje obmedzenie cudzieho kľúča, vykoná akcia aktualizácie alebo odstránenia. UPDATE aj DELETE môžu mať rovnaké alebo rôzne možnosti referencie.
O rôznych akciách referenčnej integrity by sme sa dozvedeli ďalej v tomto tutoriále.
Pozrime sa na príklad referencie ZAHRANIČNÝ KLÍČ na príklade Zamestnanec / oddelenie. Vytvoríme tabuľku Department so stĺpcami - departmentId (int & PRIMARY KEY) a departmentName (varchar).
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL, departmentName VARCHAR(100));
Vytvorte tabuľku Zamestnanec so stĺpcami uvedenými nižšie:
Stĺpec | Typ |
---|---|
id | INT (primárny kľúč) |
názov | VARCHAR |
dept_id | INT (cudzí kľúč) odkazovaný z tabuľky oddelenia |
adresa | VARCHAR |
Vek | INT |
čias | DÁTUM |
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE);
Ako vidíte, vo vyššie uvedenej tabuľke Zamestnanci sme deklarovali stĺpec deptId typu Int a definovali CUDZÍ KLÍČ z tabuľky Oddelenie v stĺpci departmentId.
Čo to v podstate znamená, že stĺpec deptId v tabuľke Zamestnanec môže obsahovať iba hodnoty, ktoré sú v tabuľke Oddelenie.
Skúsme vložiť údaje do týchto tabuliek a uvidíme, ako funguje FOREIGN KEY CONSTRAINT.
- Najskôr vytvorte záznam v tabuľke oddelenia a do tabuľky zamestnancov pridajte záznam odkazujúci na ID záznamu, ktorý bol pridaný do tabuľky oddelenia.
INSERT INTO department VALUES (1, 'ENGINEERING') --------- INSERT INTO EMPLOYEE VALUES (1, 'AMIT KUMAR', 'MUMBAI', 32, '1988-02-12',1);
Uvidíte, že oba príkazy by sa vykonali bez chýb.
- Teraz uveďte hodnotu pre departmentId, ktorá neexistuje.
Napríklad, v nasledujúcom výpise dotazu vytvárame zamestnanca s neexistujúcim departmentId -10
INSERT INTO EMPLOYEE VALUES (1, 'DARREN JOHNSON', 'CHICAGO', 32, '1988-02-12',10);
- V tomto scenári sa zobrazí chyba uvedená nižšie:
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`my_sql_foreign_key`.`employee`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`) ON DELETE CASCADE ON UPDATE CASCADE)
Všeobecne teda platí, že keď sú definované FOREIGN KEY References, je dôležité zabezpečiť, aby tabuľka, na ktorú sa odkazuje, mala pred jej odoslaním údaje.
Referenčné akcie integrity
Najprv sa pokúsime pochopiť, čo to vlastne referenčná integrita je.
Referenčná integrita pomáha udržiavať údaje v čistom a konzistentnom stave, keď existujú navzájom súvisiace tabuľky so vzťahom ZAHRANIČNÝ KLÍČ.
Jednoducho povedané, Referenčná integrita sa týka akcie, ktorú očakávame od databázového stroja, keď sa v odkazovanej tabuľke, ktorá obsahuje CUDZÍ KĽÚČ, uskutoční UPDATE alebo DELETE.
Napríklad, v našom príklade Zamestnanec / Oddelenie predpokladajme, že zmeníme ID oddelenia pre určitý riadok v DB. Potom by to malo vplyv na všetky riadky odkazov v tabuľke zamestnancov. Môžeme definovať rôzne typy scenárov referenčnej integrity, ktoré sa dajú v takýchto prípadoch použiť.
Poznámka: Referenčná integrita je definovaná počas nastavenia / deklarácie FOREIGN KEY ako súčasť príkazov / sekcií ON DELETE a ON UPDATE.
Tu si pozrite ukážkový dotaz (príklad zamestnanca / oddelenia):
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL, departmentName VARCHAR(100)); CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE {ref-integrity-action} ON DELETE {ref integrity action});
Do týchto tabuliek vložte niektoré údaje, ako je uvedené nižšie:
INSERT INTO department VALUES (1, 'ENGINEERING'), (2,'ACCOUNTING'), (3, 'MARKETING'), (4, 'HR'), (5, 'LEGAL'); INSERT INTO EMPLOYEE VALUES (1, 'AMIT KUMAR', 'MUMBAI', 32,'1988-02-12',1), (2, 'RYAN HILMAN', 'SEATTLE',43, '1977-03-15',1), (3, 'KAVITA SINGH', 'DELHI', 42, '1978-02-18',4), (4, 'DAVID BECKHAM', 'LONDON', 40, '1980-07-13',3), (5, 'PRITI KUMARI', 'DELHI', 35, '1985-12-11',2), (6, 'FRANK BALDING', 'NEW YORK', 35, '1985-08-25',5)
MySQL podporuje 4 referenčné akcie. Pokúsme sa porozumieť každému z nich.
# 1) KASKÁDA
Toto je jedna z najčastejšie používaných akcií referenčnej integrity. Nastavenie DELETE a UPDATE na CASCADE by použilo zmeny vykonané v referenčnej tabuľke v referenčnej tabuľke, t. J. V príklade zamestnanec / oddelenie. Predpokladajme, že niekto odstráni riadok v tabuľke Oddelenie, ktorý musí povedať department_name = ÚČTOVNÍCTVO, potom by boli odstránené aj všetky riadky v tabuľke Zamestnanci, ktoré majú číslo_oddelenia ako v účtovnej tabuľke.
Poďme to pochopiť na príklade:
SELECT * FROM employee;
id | názov | adresa | Vek | čias | deptId |
---|---|---|---|---|---|
jeden | AMIT KUMAR | MUMBAI | 32 | 12.02.1988 | jeden |
dva | RYAN HILMAN | SEDADLO | 43 | 1977-03-15 | jeden |
3 | KAVITA SINGH | DELHI | 42 | 1978-02-18 | 4 |
4 | DAVID BECKHAM | LONDÝN | 40 | 1980-07-13 | 3 |
5 | PRITI KUMARI | DELHI | 35 | 11.12.1985 | dva |
6 | FRANK BALDING | NEW YORK | 35 | 1985-08-25 | 5 |
Odstrániť záznam z tabuľky oddelenia, kde departmentName = „ÚČTOVNÍCTVO“
DELETE from DEPARTMENT WHERE departmentName='ACCOUNTING';
Teraz, keďže ide o referenčnú akciu KASKÁDY, by sme očakávali, že by mali byť odstránené aj všetky riadky, ktoré majú departmentID = 2 (čo je pre oddelenie „ÚČTOVNÍCTVO“). Urobme znova dotaz SELECT na tabuľke Zamestnanci.
SELECT * FROM employee;
id | názov | adresa | Vek | čias | deptId |
---|---|---|---|---|---|
jeden | AMIT KUMAR | MUMBAI | 32 | 12.02.1988 | jeden |
dva | RYAN HILMAN | SEDADLO | 43 | 1977-03-15 | jeden |
3 | KAVITA SINGH | DELHI | 42 | 1978-02-18 | 4 |
4 | DAVID BECKHAM | LONDÝN | 40 | 1980-07-13 | 3 |
6 | FRANK BALDING | NEW YORK | 35 | 1985-08-25 | 5 |
Ako vidíte vyššie, z dôvodu referenčnej integrity CASCADE budú riadky v tabuľke Zamestnanci, ktoré odkazovali na odstránený stĺpec ako CUDZÍ KĽÚČ, odstránené.
# 2) OBMEDZENIE / ŽIADNA AKCIA
Režim OBMEDZENIA alebo ŽIADNA AKCIA neumožní žiadne operácie AKTUALIZÁCIA alebo ODSTRÁNENIE v tabuľke so stĺpcami, na ktoré sa v niektorých tabuľkách odkazuje ako NA ZAHRANIČNÝ KLÍČ.
Režim ŽIADNA AKCIA sa dá použiť jednoduchým vynechaním klauzúl ON UPDATE a ON DELETE z deklarácie tabuľky.
Skúsme rovnaký príklad a v tomto prípade jednoducho preskočte akciu Referenčná integrita ON UPDATE a ON DELETE.
Teraz, keď sa pokúsime odstrániť akýkoľvek záznam v odkazovanej tabuľke, dostaneme chybu, pretože sme nastavili referenčnú akciu na RESTRICT
DELETE FROM department WHERE departmentName='ACCOUNTING';
Ak sa pokúsite vykonať vyššie uvedený príkaz DELETE, zobrazí sa chyba podobná nižšie.
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`my_sql_foreign_key`.`employee`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`))
# 3) NASTAVTE NULL
Pri SET NULL by akýkoľvek UPDATE alebo DELETE v odkazovanej tabuľke spôsobil aktualizáciu hodnoty NULL oproti hodnote stĺpca, ktorý je v referenčnej tabuľke označený ako FOREIGN KEY.
S touto akciou referenčnej integrity by sa definícia tabuľky Zamestnanec stala nasledovnou:
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON DELETE SET NULL);
Odstráňte riadok v referenčnej tabuľke, ako je uvedené nižšie:
DELETE FROM department WHERE departmentName='ACCOUNTING';
Teraz by v tomto prípade bola odkazovaná hodnota v tabuľke Zamestnanci nastavená na hodnotu NULL. Ak chcete vidieť výsledky, urobte v tabuľke zamestnancov dotaz SELECT.
SELECT * FROM employee;
id | názov | adresa | Vek | čias | deptId |
---|---|---|---|---|---|
jeden | AMIT KUMAR | MUMBAI | 32 | 12.02.1988 | jeden |
dva | RYAN HILMAN | SEDADLO | 43 | 1977-03-15 | jeden |
3 | KAVITA SINGH | DELHI | 42 | 1978-02-18 | 4 |
4 | DAVID BECKHAM | LONDÝN | 40 | 1980-07-13 | 3 |
5 | PRITI KUMARI | DELHI | 35 | 11.12.1985 | NULOVÝ |
6 | FRANK BALDING | NEW YORK | 35 | 1985-08-25 | 5 |
# 4) NASTAVENIE VÝCHODISKA
Ak je zadaný režim SET DEFAULT, výsledkom by bolo nahradenie predvolenej hodnoty pre stĺpec (ako je uvedené pri deklarácii stĺpca) v prípade, že sa na tabuľku odkazuje DELETES.
Poznámka - Podľa Dokumentácia MySQL , možnosť SET DEFAULT podporuje MySQL Parser, ale nie DB motory ako InnoDB. Môže to byť podporované v budúcnosti.
Na podporu takéhoto správania však môžete zvážiť použitie SET NULL a v tabuľke definovať spúšťač, ktorý by mohol nastaviť predvolenú hodnotu.
Pridajte obmedzenie FOREIGN KEY pomocou príkazu ALTER TABLE
Mnohokrát sa môže stať, že budeme chcieť pridať obmedzenie FOREIGN KEY do existujúcej tabuľky, ktorá ju nemá.
Predpokladajme, že v príklade Zamestnanec a oddelenie sme vytvorili tabuľku zamestnancov bez obmedzenia FOREIGN KEY a neskôr chceme obmedzenie zaviesť. To sa dá dosiahnuť pomocou príkazu ALTER TABLE.
Pokúsme sa to pochopiť na príklade.
Predpokladajme, že máme k dispozícii tabuľku zamestnancov s nasledujúcou definíciou príkazu CREATE.
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT);
Tu máme stĺpec deptId, ale žiadne obmedzenie FOREIGN KEY. V takom prípade aj bez toho, aby sme mali tabuľku oddelení, môžeme pri vkladaní záznamov určiť ľubovoľné hodnoty.
Teraz, neskôr predpokladajme, že máme samostatnú tabuľku oddelení a chceme prepojiť oddelenie Id ako zahraničný kľúč s tabuľkou zamestnancov.
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
Čo ak táto tabuľka obsahuje existujúce údaje? Môžeme zmeniť tabuľku a pridať obmedzenie ZAHRANIČNÝ KĽÚČ?
Odpoveď je áno - môžeme za podmienky, že existujúce hodnoty v stĺpci, na ktorý sa bude odkazovať z inej tabuľky, by mali mať tieto hodnoty existujúce v samotnej nadradenej tabuľke.
Vytvorte tabuľku zamestnancov bez obmedzenia FOREIGN KEY, pridajte nejaké údaje a skúste pridať obmedzenie FOREIGN KEY pomocou príkazu ALTER.
príklady aplikácií internetu vecí
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT);
INSERT INTO EMPLOYEE VALUES (1, 'DARREN JOHNSON', 'CHICAGO', 32, '1988-02-12',1); INSERT INTO EMPLOYEE VALUES (2, 'ANITA SHERWIN', 'COLUMBIA', 32, '1988-02-12',10);
Vytvorte tabuľku oddelenia a pridajte CUDZÍ KĽÚČ do poľa „deptId“ v tabuľke zamestnancov, ako je uvedené nižšie:
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL DEFAULT 1000, departmentName VARCHAR(100));
V tomto okamihu, ak sa pokúsime pridať obmedzenie FOREIGN KEY,
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
Potom sa zobrazí chyba, pretože tabuľka Zamestnanec obsahuje niektoré údaje, ale obmedzenie referenčnej integrity nie je možné splniť, pretože tabuľka oddelenia zatiaľ nemá žiadne údaje.
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`my_sql_foreign_key`.`#sql-63_87`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`) ON DELETE CASCADE ON UPDATE CASCADE)
Aby sme mali obmedzenie FOREIGN KEY, budeme musieť najskôr pridať údaje do tabuľky Department. Poďme vložiť požadované záznamy do tabuľky oddelenia.
INSERT INTO department VALUES (1, 'ENGINEERING'),(10,'ACCOUNTING');
Pridajte znova podmienku FOREIGN KEY vykonaním rovnakého príkazu ALTER TABLE. Všimnete si, že tentokrát je príkaz úspešný a tabuľka Zamestnanec je úspešne aktualizovaná tak, aby mala z tabuľky Oddelenie hodnotu deptId ako CUDZÍ KLÍČ.
Zrušenie obmedzenia zahraničného kľúča
Podobne ako pri pridávaní obmedzenia FOREIGN KEY je tiež možné zrušiť / odstrániť existujúce obmedzenie FOREIGN KEY z tabuľky.
To sa dá dosiahnuť pomocou príkazu ALTER TABLE.
Syntax:
ALTER TABLE {childTable} DROP FOREIGN KEY {foreign key constraint name};
Tu je „childTable“ názov tabuľky, ktorá má definované obmedzenie FOREIGN KEY, zatiaľ čo „názov obmedzenia cudzieho kľúča“ je názov / symbol, ktorý bol použitý na definovanie FOREIGN KEY.
Pozrime sa na príklad použitia tabuľky Zamestnanec / oddelenie. Ak chcete zrušiť obmedzenie s názvom „depIdFk“ z tabuľky Zamestnanci, použite nasledujúci príkaz:
ALTER TABLE employee DROP FOREIGN KEY depIdFk;
často kladené otázky
Otázka 1) Ako môžem zmeniť cudzie kľúče v MySQL?
Odpoveď: FOREGIN KEY je možné pridať / odobrať pomocou príkazu ALTER TABLE.
Ak chcete zmeniť alebo pridať nový ZAHRANIČNÝ KLÍČ, môžete použiť príkaz ALTER a definovať ZAHRANIČNÝ KLÍČ a odkaz na stĺpec tabuľky, na ktorý sa bude odkazovať z podradenej tabuľky.
Otázka 2) Ako nastaviť viac cudzích kľúčov v MySQL?
Odpoveď: Tabuľka v MySQL môže mať viac ZAHRANIČNÝCH KLÁVES, ktoré môžu závisieť od rovnakej nadradenej tabuľky alebo od rôznych nadradených tabuliek.
Použime tabuľku Zamestnanec / Oddelenie a do tabuľky Zamestnanec pridajme ZAHRANIČNÝ KLÍČ pre názov oddelenia a DepartmentId.
Ako je uvedené nižšie, pozrite si príkazy CREATE oboch tabuliek
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL DEFAULT 1000, departmentName VARCHAR(100) UNIQUE NOT NULL); ----xxxxx------xxxxx------xxxxx-------xxxxx------xxxxx CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, depName VARCHAR(100), CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT depNameFk FOREIGN KEY (depName) REFERENCES department(departmentName) ON UPDATE CASCADE ON DELETE CASCADE);
Otázka č. 3) Ako zakázať obmedzenia cudzieho kľúča v MySQL?
Odpoveď: Ak sa niekto pokúša skrátiť existujúcu tabuľku, na ktorú sa odkazuje, obmedzenie FOREIGN KEY sa zvyčajne vyžaduje. Môžete to urobiť pomocou nasledujúceho príkazu:
SET FOREIGN_KEY_CHECKS=0;
Takto by sa nastavila premenná relácie a dočasne by sa deaktivovali FOREIGN_KEY_CHECKS. Po tomto nastavení môžete pokračovať a vykonať vymazanie / skrátenie, ktoré by inak nebolo možné.
Uistite sa však, že toto je oprávnenie správcu a malo by sa používať uvážlivo.
Otázka č. 4) Ako nájdem odkazy na cudzí kľúč pre tabuľku v MySQL?
Odpoveď: Ak chcete uviesť zoznam všetkých súčasných obmedzení FOREIGN KEY, môžete v tabuľke „INFORMATION_SCHEMA“ použiť tabuľku „INNODB_FOREIGN_COLS“.
Jednoduchým spustením príkazu nižšie získate všetky vyhlásenia CUDZÍCH KLÍČOV, ktoré existujú pre danú inštanciu servera MySQL.
ID | FOR_COL_NAME | REF_COL_NAME | POS |
---|---|---|---|
my_sql_foreign_key / depIdFk | deptId | departmentId | jeden |
Otázka č. 5) Mal by byť odkazovaný stĺpec ako CUDZÍ KĽÚČ primárnym kľúčom v odkazovanej tabuľke?
Odpoveď: Podľa definície ZAHRANIČNÉHO KLÍČA by bolo potrebné, aby stĺpec, na ktorý sa odkazuje ako ZAHRANIČNÝ KLÍČ, bol PRIMÁRNY KLÍČ z tabuľky, na ktorú sa odkazuje.
Avšak s novšími verziami MySQL a s databázovým strojom InnoDB môžete tiež odkazovať na stĺpec, ktorý má FOREIGN KEY, ktorý má UNIQUE obmedzenie a nemusí to byť nevyhnutne PRIMARY KEY.
Otázka č. 6) Vytvára FOREIGN KEY INDEX v MySQL?
Odpoveď: Pre primárny kľúč aj pre jedinečné obmedzenie MySQL automaticky vytvorí INDEX pre tieto stĺpce.
Pretože už vieme, že referencie FOREIGN KEY je možné použiť iba na stĺpce, ktoré sú primárnymi kľúčmi, alebo na stĺpce, ktoré majú jedinečné hodnoty, majú teda všetky stĺpce, ktoré sa označujú ako FOREIGN KEY, vytvorený index.
Na zobrazenie indexu v tabuľke použite nasledujúci príkaz:
SHOW INDEX from {dbName.tableName};
Takže pre náš príklad Zamestnanec / Oddelenie sme pridali deptId do Zamestnanec ako ZAHRANIČNÝ KLÍČ z tabuľky Oddelenie.
Pozrime sa na vytvorené indexy v tabuľkách Zamestnanci a oddelenia.
USE my_sql_foreign_key; SHOW INDEX from employee;
Tabuľka | Non_unique | Key_name | Seq_in_index | Názov_stĺpca | Zoradenie | Mohutnosť | Podčasť | Zabalené | Nulový | Typ_indexu |
---|---|---|---|---|---|---|---|---|---|---|
zamestnanec | 0 | PRIMÁRNY | jeden | id | TO | 0 | NULOVÝ | NULOVÝ | BTREE | |
zamestnanec | jeden | depIdFk | jeden | deptId | TO | 0 | NULOVÝ | NULOVÝ | ÁNO | BTREE |
Môžete vidieť 2 indexy - jeden je primárnym kľúčom pre tabuľku Zamestnanec a ďalší je určený pre DEVIČNÝ KĽÚČ, na ktorý sa odkazuje z tabuľky oddelenia.
SHOW INDEX from department;
Tabuľka | Non_unique | Key_name | Seq_in_index | Názov_stĺpca | Zoradenie | Mohutnosť | Podčasť | Zabalené | Nulový | Typ_indexu |
---|---|---|---|---|---|---|---|---|---|---|
oddelenie | 0 | PRIMÁRNY | jeden | departmentId | TO | 0 | NULOVÝ | NULOVÝ | BTREE |
Tu vidíte, že pre tabuľku oddelení máme iba 1 index pre primárny kľúč (ktorý sa v tabuľke zamestnancov označuje ako ZAHRANIČNÝ KĽÚČ).
Otázka č. 7) Môže byť FOREIGN KEY v MySQL NULL?
Odpoveď: Áno, je úplne v poriadku mať NULL pre stĺpec, ktorý má závislosť FOREIGN KEY na inej tabuľke. To tiež naráža na skutočnosť, že NULL nie je skutočná hodnota, a preto nie je porovnaná s hodnotami v nadradenej tabuľke.
Záver
V tomto tutoriáli sme sa dozvedeli o rôznych konceptoch týkajúcich sa používania FOREIGN KEYS v databázach MySQL.
FOREIGN KEY uľahčuje aktualizácie a mazanie s príslušnými obmedzeniami, ale niekedy môže mať veľa takýchto vzťahov celý proces vkladania a / alebo mazania dosť ťažkopádnym.
Naučili sme sa, ako vytvárať ZAHRANIČNÉ KLÁVESY a ako môžeme aktualizovať a zrušiť existujúci ZAHRANIČNÝ KLÍČ z podradenej tabuľky. Dozvedeli sme sa tiež o rôznych akciách referenčnej integrity a o tom, ako môžeme dosiahnuť odlišné správanie pomocou rôznych dostupných možností ako CASCADE, NO ACTION, SET NULL atď.
Odporúčané čítanie
- MySQL Vytvorenie výučby tabuľky s príkladmi
- MySQL Vložiť do tabuľky - Vložiť syntax príkazov a príklady
- Výukový program na vytvorenie prehľadu MySQL s príkladmi kódu
- Funkcie MySQL CONCAT a GROUP_CONCAT s príkladmi
- Výukový program pre transakcie MySQL s príkladmi programovania
- MySQL UNION - komplexný návod s príkladmi Únie
- Ako sťahovať MySQL pre Windows a Mac
- Rozdiel medzi serverom SQL Vs MySQL Vs SQL Server (s príkladmi)