Sådan bruges MySQL udenlandske nøglebegrænsninger

How Use Mysql Foreign Key Constraints



Den udenlandske nøglebegrænsning bruges til at oprette en relation mellem to tabeller i MySQL -databasen. Det er en meget vigtig funktion i MySQL at angive forskellige typer begrænsninger på de relaterede tabeller. For at definere enhver fremmed nøglebegrænsning for enhver tabel skal du bruge hovednøglen i en anden tabel. Den primære nøgle er en unik nøgle til en tabel til at identificere den bestemte række i tabellen, og når denne primære nøgle bruges i en anden tabel til at oprette en-til-en eller en-til-mange eller mange-til-mange-forhold, så er det kaldes en fremmed nøgle. Funktionerne i fremmede nøgler, og hvordan disse nøgler kan bruges i MySQL -tabeller, er vist i denne artikel.

Egenskaber ved udenlandske nøglebegrænsninger:

Nogle vigtige træk ved fremmed nøglebegrænsning er forklaret nedenfor.







  • Datatypen for den udenlandske nøgle, der bruges i underordnetabellen, skal være den samme som datatypen for den primære nøgle, der bruges i den overordnede tabel til at henvise til den udenlandske nøgle.
  • Enhver indekskolonne eller flere kolonner kan kun betegnes som en fremmed nøgle for InnoDB -tabellen.
  • Referencerettigheder eller mindst et af privilegierne for SELECT, INSERT, UPDATE og DELETE -sætningerne er påkrævet for at oprette en fremmed nøgle.
  • En fremmed nøgle kan oprettes på to måder. En ved hjælp af CREATE -sætningen og en anden ved hjælp af ALTER -sætningen.

Forudsætning:

Inden du opretter en fremmed nøglebegrænsning, skal du oprette en database og forældretabel med den primære nøgle. Antag, at databasens navn er ' bibliotek 'Og den indeholder to overordnede tabeller med navnet' bøger 'Og' låntager ’. Opret forbindelse til MySQL -serveren ved hjælp af mysql klient og kør følgende SQL -sætninger for at oprette databasen og tabellerne.



SKAB DATABASE bibliotek;
BRUG bibliotek;

SKAB BORD bøger(
id INT IKKE NUL AUTO_INCREMENT ,
titel varchar (halvtreds) IKKE NUL ,
forfatter varchar (halvtreds) IKKE NUL ,
forlægger varchar (halvtreds) IKKE NUL ,
PRIMÆRNØGLE (id)
) MOTOR = INNODB ;

SKAB BORD låntagere(
id VARCHAR (halvtreds) IKKE NUL ,
navn varchar (halvtreds) IKKE NUL ,
adresse varchar (halvtreds) IKKE NUL ,
e -mail varchar (halvtreds) IKKE NUL ,
PRIMÆRNØGLE (id)
) MOTOR = INNODB ;



Definer fremmed nøglebegrænsning ved hjælp af CREATE -sætning

Opret en tabel med navnet ' bog_låne_info 'Med udenlandske nøglebegrænsninger ved at udføre følgende erklæring. Her er bog_id feltet er et fremmed nøgle for denne tabel og hver værdi af dette felt skal eksistere i id felt af bøger bord. bøger er forældretabellen og bog_låne_info er barnebordet. To begrænsninger er også sat med den udenlandske nøgle her. Disse er SLET CASCADE og OPDATER CASCADE . Det betyder, at hvis en primær nøgle vil fjerne eller opdatere fra den overordnede tabel, vil de tilsvarende poster relateret til underordnetabel relateret til den udenlandske nøgle blive fjernet, eller den udenlandske nøgle vil blive opdateret.





SKAB BORD bog_lån_info(
låne_id VARCHAR (halvtreds),
bog_id INT ,
låne_dato DATO IKKE NUL ,
Retur dato DATO IKKE NUL ,
status VARCHAR (femten) IKKE NUL ,
INDEKS par_ind(bog_id),
PRIMÆRNØGLE (låne_id,låne_dato),
FREMMED NØGLE (bog_id) REFERENCER bøger(id)
SLET CASCADE
OPDATER CASCADE
) MOTOR = INNODB ;

Kør nu følgende SQL -sætninger for at indsætte nogle poster i begge tabeller. Den første INSERT -sætning vil indsætte fire poster i bøger bord. De fire værdier af id felt af bøger tabellen vil være 1, 2, 3 og 4 for attributten auto-increment. Den anden INSERT -sætning vil indsætte fire poster i bog_låne_info baseret på id Værdi af bøger bord.



INDSÆT IND I bøger VÆRDIER
( NUL , 'At dræbe en drossel', 'Harper Lee', 'Grand Central Publishing'),
( NUL , 'Hundrede års ensomhed', 'Garcia Marquez', 'Lutfi Ozkok'),
( NUL , 'En passage til Indien', 'Forster, E.M.', 'BBC Hulton Picture Library'),
( NUL , 'Usynlig mand', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');

INDSÆT IND I bog_låne_info VÆRDIER
('123490', 1, '2020-02-15', '2020-02-25', 'Vendt tilbage'),
('157643', 2, '2020-03-31', '2020-03-10', 'Verserende'),
('174562', 4, '2020-04-04', '2020-04-24', 'Lånte'),
('146788', 3, '2020-04-10', '2020-01-20', 'Lånte');

Hvis du forsøger at indsætte en værdi i det udenlandske nøglefelt i underordnetabellen, der ikke findes i det primære nøglefelt i forældretabellen, genererer MySQL en fejl. Følgende SQL -sætning genererer en fejl, fordi den overordnede tabel, bøger indeholder ikke nogen id -værdi 10 .

INDSÆT IND I bog_låne_info VÆRDIER
('195684', 10, '2020-04-15', '2020-04-30', 'Vendt tilbage');

Efter at have udført følgende DELETE -sætning, når den fjerde post vil blive fjernet fra bøger tabel derefter de relaterede poster fra bog_låne_info tabellen vil blive fjernet automatisk for den udenlandske nøglebegrænsning.

SLET FRA bøger HVOR id= 4;
VÆLG * fra bøger;
VÆLG * fra bog_låne_info;

Definer fremmed nøglebegrænsning ved hjælp af ALTER -sætning

Indsæt først nogle optegnelser i låntagere tabel, og denne tabel vil blive defineret som forældretabel i den næste ALDER udmelding.

INDSÆT IND I låntagere VÆRDIER
('123490', 'Patrick Wood', '34 West Street LANCASTER LA14 9ZH ', '[email protected]'),
('157643', 'Ezra Martin', '10 The Grove BIRMINGHAM B98 1EU ', '[email protected]'),
('174562', 'John Innes Archie', '55 Main Road LIVERPOOL L2 3OD ', '[email protected]'),
('146788', 'Frederick Hanson', '85 Highfield Road SHREWSBURY SY46 3ME ', '[email protected]');

Kør følgende ALDER erklæring til at angive en anden fremmed nøglebegrænsning for bog_låne_info bord at lave forholdet til låntagere bord. Her, låne_id er defineret som en fremmed nøgle til bog_låne_info bord.

ALTER TABLE book_borrow_info TILFØJ KONSTRAINT fk_låntager
FREMMED NØGLE(låne_id)REFERENCER låntagere(id)PÅ SLET CASCADE OM OPDATERINGSBEGRÆNSNING;

Indsæt nu en rekord i bog_låne_info med gyldigt låne_id værdi, der findes i id felt af låntagere bord. 157643 værdi findes i låntagertabellen, og følgende INSERT -sætning vil blive udført med succes.

INDSÆT IND I bog_låne_info VÆRDIER
('157643', 1, '2020-03-10', '2020-03-20', 'Vendt tilbage');

Følgende INSERT -sætning genererer en fejlmeddelelse, fordi id -værdien 195680 findes ikke i låntagertabellen.

INDSÆT IND I bog_låne_info VÆRDIER
('195680', 1, '2020-04-15', '2020-04-30', 'Vendt tilbage');

Konklusion:

At definere udenlandske nøglebegrænsninger korrekt er en meget vigtig opgave for at oprette en relationsdatabase og administrere data blandt tabellerne korrekt. At kende brugen af ​​udenlandske nøglebegrænsninger er meget vigtigt for databasedesignere. Jeg håber, at denne artikel vil hjælpe de nye databasedesignere med at forstå begrebet udenlandske nøglebegrænsninger og anvende dem korrekt i deres opgaver.