Bevezetés az SQL idegen kulcsába
Az idegen kulcs az SQL korlátozása. A két táblázat összekapcsolására szolgál. Az egyik táblázatban szereplő idegen kulcs az elsődleges kulcsra mutat egy másik táblázatban. Idegen kulcs felhasználható annak ellenőrzésére, hogy az egyik táblázat sorának megfelelő sor / sorok vannak-e egy másik táblázatban. A hivatkozott táblát szülőtáblának nevezzük, és az idegen kulcsgal ellátott táblázatot gyermektáblának nevezzük. Ez a szülő-gyermek kapcsolat érvényesíti a Referencia-integritás néven ismert szabályt. A referencia integritása az adatok olyan tulajdonsága, hogy minden hivatkozásuk érvényes.
Tehát, ha egy-egy-sok vagy sok-sok-féle kapcsolat van az adatbázisban, az idegen kulcsok nagyon hasznosak lesznek. Kereszthivatkozásként működik két tábla (szülőtábla és gyereklap) között, mert utal egy másik tábla elsődleges kulcsára. Tehát kapcsolatot létesít a szülőtábla és a gyerekasztal között.
Szintaxis
Új tábla létrehozásához idegen kulcs segítségével a CREATE TABLE engedélyre van szükség az adatbázisban
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 ) ) );
- A Child_Table az a táblanév, amelyet létrehozunk
- _1 oszlop, _2 oszlop - a táblázathoz hozzáadni kívánt oszlopok.
- F_key- Ez egy idegen kulcskorlátozás.
- gyermek_oszlop1, gyermek_oszlop2… gyermek_oszlop_n- A gyermek_Táblázat oszlopok neve hivatkozik az elsődleges kulcsra a szülőtáblában.
- Parent_Table - Ez a szülőtábla neve. A parent_table elsődleges kulcsára a child_table hivatkozik
- BE TÖRLÉS - Ez a paraméter a szülõ adatok törlését követõen fellép a gyermekekre vonatkozó adatokkal. SET NULL, NEM MŰKÖDIK, CASCADE, SET DEFAULT a paraméter néhány értéke.
- ON UPDATE - Ez egy opcionális paraméter, amely a szülő adatok frissítése után végrehajtja a csereadatokat. SET NULL, NEM MŰKÖDIK, CASCADE, SET DEFAULT a paraméter néhány értéke.
- CASCADE - Használhatjuk ezt az ON DELETE és ON UPDATE fájlokkal együtt. A szülõ adatok törlése vagy frissítése után a gyermekeket törlik vagy frissítik.
Idegen kulcs létrehozásához egy meglévő táblában ALTER engedélyre van szükség az asztalon.
ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)
szabályok
- Az idegen kulcsok nem alkalmazhatók ideiglenes táblákra.
- Az idegen kulcs-korlátozást nem kell csak egy másik tábla elsődleges kulcsához kapcsolni, hanem összekapcsolható egy másik tábla EGYEDI korlátozásával is.
- A KÜLÖNLEGES KULCS-korlátozások ugyanazon táblázat másik oszlopára hivatkozhatnak. Ezt önreferenciának nevezik.
- Az idegen kulcs korlátozások ugyanazon adatbázis tábláira vonatkozhatnak.
- A NULL értékeket beszúrhatjuk a gyermektáblába is.
- Amikor a NULL-től eltérő értéket illesztünk be az idegen kulcs-korlátozásba, akkor az értéknek léteznie kell a hivatkozott oszlopban, vagyis a megsértési üzenet történt.
- A szülő egyedi kulcsainak értéke nem módosítható, ha a frissítési szabály RESTRICT és egy vagy több függő sor van. Ha azonban a frissítési szabály NEM MŰKÖDIK, az egyedi szülői kulcsok frissíthetők mindaddig, amíg a frissítés befejezéséig minden gyermek rendelkezik szülőkulccsal.
Példák
Tegyük fel, hogy két asztalunk van: Ügyfelek és Megrendelések. Az Ügyfelek táblázata tartalmazza az összes ügyféllel kapcsolatos adatot, és a Megrendelések táblázat tartalmazza az ügyfelekkel kapcsolatos adatokat.
Az ügyfelek
CUST_ID | Elsődleges kulcs |
CUST_NAME | |
Elhelyezkedés |
rendelés
Rendelés azonosító | Elsődleges kulcs |
Rendelés dátuma | |
Mennyiség | |
CUST_ID | Idegen kulcs |
Teljes összeg |
A fenti példában a RENDELÉSEK táblázatának Cust_id oszlopa egy idegen kulcs, amely a CUSTOMERS táblában a Cust_id oszlopra mutat.
Tegyük fel, hogy ezeknek a táblázatoknak a következő értékei vannak
Az ügyfelek
1001 | Alex | MINKET |
1002 | Carey | MINKET |
1003 | Sid | UK |
1004 | Tomi | AUS |
1005 | Kapil | IND |
rendelés
78 | 20-10-2018 | 5 | 1002 | 1200 |
79 | 2017/12/10 | 4 | 1001 | 800 |
80 | 20-11-2016 | 2 | 1005 | 369 |
81 | 2016/09/10 | 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 | 2016/02/01 | 2 | 1002 | 260 |
A cust_id 1001 esetén három megrendelés létezik a megrendelési táblázatban.
A cust_id 1003 esetén nincs megrendelés.
Tehát ha van bizonyos adat (Say id 1003) a szülőtáblában, akkor nem szükséges, hogy ezeket az adatokat a gyermektáblában szerezzük, hanem fordítva nem igaz.
A Gyerektáblában (Megrendelési táblázat) nem lehet olyan adat, amely nem létezik a szülőtáblában (Ügyfelek.)
Például, nem helyezhetünk új beszámolót a cust_id 1006 értékre a Megrendelések táblába, mert a cust_id 1006 nem létezik az Ügyfelek táblában.
Az alábbiakban bemutatjuk azokat a példákat, amelyek megsértik a kapcsolat referencia-integritását:
- Sor beillesztése az ORDERS táblába, ahol a Cust_ID nem jelenik meg az ügyfelek táblázatának Cust_ID oszlopában.
- Egy sor törlése az ÜGYFÉL-táblából, ahol a törlendő sor Cust_ID továbbra is jelen van a RENDELÉSEK táblázat_HU_ID oszlopában.
Ha egy adott rekordot törölnek a főtáblából, kétféle módon lehet megőrizni a gyermektáblában szereplő adatok integritását. Ha két táblázat kapcsolódik az idegen kulcshoz, és a főtáblázatból bizonyos adatokat törölnek, amelyekre a rekord létezik a gyermektáblában is, akkor van valamilyen mechanizmusunk az alsó táblában lévő adatok integritásának megmentésére.
- A Kaszkád törlésekor: Ez törli a rekordot az utódtáblából, ha az idegen kulcs értékét törlik a fő táblából.
- On NULL törlése: Ezzel a Gyerektábla-rekord összes értékét NULL-ként állítja be, amelyre az idegen kulcs értékét törlik a fő táblából.
Következtetés - Idegen kulcs az SQL-ben
Ezért tanácsos az idegen kulcsot használni az adatbázisban, amelynek egy-egy vagy egy-sok kapcsolat van. Az idegen kulcskorlátozások alkalmazásának fő előnye, hogy javítja a teljesítményt. A fejlesztők könnyen azonosíthatják az adatbázis szerkezetét. Azt is megvizsgálhatjuk, hogy a lekérdezés hogyan fogja letölteni az adatokat.
Ajánlott cikkek
Ez egy útmutató az SQL idegen kulcsához. Itt az SQL idegen kulcsának szabályait és példáit tárgyaljuk a Szintaxissal. Lehet, hogy megnézi a következő cikkeket is, ha többet szeretne megtudni -
- SQL nézetek
- Csatlakozás típusai az SQL Server-ben
- Mi az a PL / SQL?
- SQL Server korlátozások
- A MySQL 6 legfontosabb csatlakozási típusa példákkal