SQL idegen kulcs VS elsődleges kulcs a MySQL szintaxis példákkal magyarázva

Az idegen kulcs két tábla összekapcsolására használt kulcs. Az idegen kulcskötelezettségű tábla (más néven „gyermekasztal”) egy másik táblához (más néven: „szülőtábla”) kapcsolódik. A kapcsolat a gyermektábla idegen kulcskorlátozása és a szülőtábla elsődleges kulcsa között van.

Az idegen kulcs korlátozásai segítenek a táblák közötti konzisztencia fenntartásában. Például, ha egy szülőtábla rekord törlődik, és a gyermektáblának vannak rekordjai, akkor a rendszer törölheti a gyermekrekordokat is.

Azáltal is megakadályozzák a pontatlan adatok beírását a gyermektáblába, hogy megkövetelik, hogy a gyermektáblába beírt minden bejegyzéshez létezzen szülőtábla-rekord.

Példa felhasználásra

Ebben az útmutatóban közelebbről megvizsgáljuk a tanuló (szülő) és a tanuló kapcsolattartó (gyermek) táblázatait.

A szülőtábla elsődleges kulcsa

Vegye figyelembe, hogy a diáktáblának egy oszlopos elsődleges kulcsa van a studentID-nek.

SHOW index FROM student; 
+---------+------------+----------+--------------+-------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | +---------+------------+----------+--------------+-------------+ | student | 0 | PRIMARY | 1 | studentID | +---------+------------+----------+--------------+-------------+ 1 row in set (0.00 sec) (some columns removed on the right for clarity) 

A gyermekasztal elsődleges és idegen kulcsai

A hallgatói kapcsolattartási információs táblának van egy elsődleges kulcsa, amely egyben a studentID is. Ennek oka az, hogy a két tábla között egy-egy kapcsolat van. Más szavakkal, hallgatónként csak egy hallgatóra és egy hallgatói kapcsolattartási rekordra számítunk.

SHOW index FROM `student-contact-info`; 
+----------------------+------------+----------+--------------+-------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | +----------------------+------------+----------+--------------+-------------+ | student-contact-info | 0 | PRIMARY | 1 | studentID | +----------------------+------------+----------+--------------+-------------+ 1 row in set (0.00 sec) (some columns removed on the right for clarity) 
SELECT concat(table_name, '.', column_name) AS 'foreign key', concat(referenced_table_name, '.', referenced_column_name) AS 'references' FROM information_schema.key_column_usage WHERE referenced_table_name IS NOT NULL AND table_schema = 'fcc_sql_guides_database' AND table_name = 'student-contact-info'; 
+--------------------------------+-------------------+ | foreign key | references | +--------------------------------+-------------------+ | student-contact-info.studentID | student.studentID | +--------------------------------+-------------------+ 1 row in set (0.00 sec) 

Példa jelentés a tanuló szülő táblázatával és a kapcsolattartó gyermek táblával

SELECT a.studentID, a.FullName, a.programOfStudy, b.`student-phone-cell`, b.`student-US-zipcode` FROM student AS a JOIN `student-contact-info` AS b ON a.studentID = b.studentID; 
+-----------+------------------------+------------------+--------------------+--------------------+ | studentID | FullName | programOfStudy | student-phone-cell | student-US-zipcode | +-----------+------------------------+------------------+--------------------+--------------------+ | 1 | Monique Davis | Literature | 555-555-5551 | 97111 | | 2 | Teri Gutierrez | Programming | 555-555-5552 | 97112 | | 3 | Spencer Pautier | Programming | 555-555-5553 | 97113 | | 4 | Louis Ramsey | Programming | 555-555-5554 | 97114 | | 5 | Alvin Greene | Programming | 555-555-5555 | 97115 | | 6 | Sophie Freeman | Programming | 555-555-5556 | 97116 | | 7 | Edgar Frank "Ted" Codd | Computer Science | 555-555-5557 | 97117 | | 8 | Donald D. Chamberlin | Computer Science | 555-555-5558 | 97118 | +-----------+------------------------+------------------+--------------------+--------------------+ 

Következtetés

A Foreign Key Constraints nagyszerű adatintegrációs eszköz. Szánjon időt arra, hogy jól megtanulja őket.

Mint mindezen SQL dolgok esetében, SOKKAL TÖBBEN számolnak velük, mint ami ebben a bevezető útmutatóban található.

Remélem, hogy ez legalább annyit ad a kezdéshez.

Kérjük, olvassa el az adatbázis-kezelő kézikönyvét, és jó szórakozást próbáljon ki magának a különböző lehetőségekkel.