Hvordan du bruker mysql utenlandske nøkkelbegrensninger

Hvordan du bruker mysql utenlandske nøkkelbegrensninger
Den utenlandske nøkkelbegrensningen brukes til å lage et forhold mellom to tabeller i MySQL -databasen. Det er en veldig viktig funksjon ved MySQL å angi forskjellige typer begrensninger på de relaterte tabellene. For å definere enhver utenlandsk nøkkelbegrensning for enhver tabell må du bruke den primære nøkkelen til en annen tabell. Den primære nøkkelen er en unik nøkkel for en tabell for å identifisere den aktuelle raden i tabellen, og når denne primære nøkkelen brukes til en annen tabell for å lage en-til-en eller en-til-mange eller mange-til-mange-forhold, så er det kalles en fremmed nøkkel. Funksjonene til utenlandske nøkler og hvordan disse nøklene kan brukes i MySQL -tabeller vises i denne artikkelen.

Funksjoner ved utenlandske nøkkelbegrensninger:

Noen viktige funksjoner i utenlandsk nøkkelbegrensning er forklart nedenfor.

  • Datatypen til den utenlandske nøkkelen som brukes i barnebordet må være den samme med datatypen til den primære nøkkelen som brukes i overordnet tabell for å henvise den utenlandske nøkkelen.
  • Enhver indekskolonne eller flere kolonner kan bare refereres til som en fremmed nøkkel for innodb -tabellen.
  • Referanser privilegier eller i det minste ett av privilegiene til Select, Sett inn, oppdatering og slett uttalelser er nødvendig for å opprette en fremmed nøkkel.
  • En fremmed nøkkel kan opprettes på to måter. En ved å bruke Create -setningen og en annen ved å bruke altererklæringen.

Forutsetning:

Før du oppretter en utenlandsk nøkkelbegrensning, må du opprette en database og overordnede tabell med den primære nøkkelen. Anta at databasenavnet er 'bibliotek'Og den inneholder to foreldrebord som heter'bøker'Og'låntaker'. Lage en forbindelse med MySQL -serveren ved å bruke mysql Klient og kjør følgende SQL -setninger for å opprette databasen og tabellene.

Opprette databasebibliotek;
Bruk bibliotek;
Lag bordbøker (
id int ikke null auto_increment,
tittelen varchar (50) ikke null,
Forfatter varchar (50) ikke null,
Utgiver Varchar (50) Ikke null,
Primærnøkkel (ID)
) Motor = innodb;
Lag bordlånere (
id varchar (50) ikke null,
Navn varchar (50) ikke null,
adresse varchar (50) ikke null,
E -post varchar (50) ikke null,
Primærnøkkel (ID)
) Motor = innodb;

Definer utenlandsk nøkkelbegrensning ved hjelp av CREATE -uttalelsen

Lag en tabell som heter 'book_borrow_info'Med utenlandske nøkkelbegrensninger ved å utføre følgende uttalelse. Her, The bok_id felt er en utenlandsk nøkkel for denne tabellen og hver verdi av dette feltet må eksistere i id innen bøker bord. bøker er foreldrebordet og book_borrow_info er barnebordet. To begrensninger er også satt med den utenlandske nøkkelen her. Disse er Slett kaskade og Oppdater kaskade. Det betyr at hvis noen primærnøkkel vil fjerne eller oppdatere fra overordnet tabell, vil de tilsvarende postene relatert til barnebord relatert til den utenlandske nøkkelen bli fjernet, eller den utenlandske nøkkelen vil bli oppdatert.

Lag tabell BOOK_BORN_INFO (
Borrow_id varchar (50),
BOOK_ID INT,
Borrow_date date ikke null,
return_date dato ikke null,
Status varchar (15) ikke null,
Indeks par_ind (Book_id),
Primærnøkkel (Borrow_id, Borrow_date),
Utenlandsk nøkkel (Book_id) Referanser bøker (ID)
På slett kaskade
På oppdatering kaskade
) Motor = innodb;

Kjør nå følgende SQL -setninger for å sette inn noen poster i begge tabellene. Den første innsatserklæringen vil sette inn fire poster i bøker bord. De fire verdiene av id innen bøker Tabellen vil være 1, 2, 3 og 4 for Auto-Increment-attributtet. Den andre innsatserklæringen vil sette inn fire poster i book_borrow_info basert på id verdien av bøker bord.

Sett inn bøker verdier
(Null, 'To Kill a Mockingbird', 'Harper Lee', 'Grand Central Publishing'),
(Null, 'Hundre år med ensomhet', 'Garcia Marquez', 'Lutfi Ozkok'),
(Null, 'A Passage to India', 'Forster, e.M.',' BBC Hulton Picture Library '),
(Null, 'Invisible Man', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');
Sett inn BOOK_BORN_INFO VERDIER
('123490', 1, '2020-02-15', '2020-02-25', 'returnert'),
('157643', 2, '2020-03-31', '2020-03-10', 'Venter'),
('174562', 4, '2020-04-04', '2020-04-24', 'lånt'),
('146788', 3, '2020-04-10', '2020-01-20', 'lånt');

Hvis du prøver å sette inn en verdi i det utenlandske nøkkelfeltet i barnebordet som ikke eksisterer i det primære nøkkelfeltet i overordnede tabellen, vil MySQL generere en feil. Følgende SQL -setning vil generere en feil fordi overordnet tabell, bøker inneholder ingen ID -verdi 10.

Sett inn BOOK_BORN_INFO VERDIER
('195684', 10, '2020-04-15', '2020-04-30', 'returnert');

Etter å ha utført følgende slettingserklæring, når den fjerde posten blir fjernet fra bøker tabell deretter de relaterte postene fra book_borrow_info Tabellen blir fjernet automatisk for den utenlandske nøkkelbegrensningen.

Slett fra bøker der id = 4;
Velg * fra bøker;
Velg * fra Book_Borrow_info;

Definer utenlandsk nøkkelbegrensning ved hjelp av alteruttalelse

Først, sett inn noen poster i låntakere tabell og denne tabellen vil bli definert som overordnet tabell i neste ENDRE uttalelse.

Sett inn låntakerverdier
('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] ');

Kjør følgende ENDRE uttalelse for å sette en annen utenlandsk nøkkelbegrensning for book_borrow_info tabell for å gjøre forholdet til låntakere bord. Her, Borrow_id er definert som en fremmed nøkkel for book_borrow_info bord.

ALTER TABLE BOOK_BORN_INFO Legg til begrensning FK_Borrower
Utenlandsk nøkkel (Borrow_id) Referanser låntakere (ID) på Delete Cascade ved oppdatering Restrict;

Nå, sett inn en registrering i book_borrow_info med gyldig Borrow_id verdi som eksisterer i id innen låntakere bord. 157643 Verdien eksisterer i låntakere og følgende innsatsoppgave vil bli utført med hell.

Sett inn BOOK_BORN_INFO VERDIER
('157643', 1, '2020-03-10', '2020-03-20', 'returnert');

Følgende innsatserklæring vil generere en feilmelding fordi ID -verdien 195680 eksisterer ikke i låntakere.

Sett inn BOOK_BORN_INFO VERDIER
('195680', 1, '2020-04-15', '2020-04-30', 'returnert');

Konklusjon:

Å definere utenlandske nøkkelbegrensninger riktig er en veldig viktig oppgave for å lage en relasjonsdatabase og administrere data mellom tabellene på riktig måte. Å kjenne bruken av utenlandske nøkkelbegrensninger er veldig viktig for databasedesignere. Jeg håper denne artikkelen vil hjelpe de nye databasedesignerne til å forstå begrepet utenlandske nøkkelbegrensninger og anvende dem ordentlig i oppgavene sine.