Slik bruker du MySQL Foreign Key Constraints

How Use Mysql Foreign Key Constraints



Den utenlandske nøkkelbegrensningen brukes til å lage et forhold mellom to tabeller i MySQL -databasen. Det er en veldig viktig funksjon i MySQL å sette forskjellige typer begrensninger på de relaterte tabellene. For å definere en fremmed nøkkelbegrensning for en hvilken som helst tabell, må du bruke hovednøkkelen til en annen tabell. Primærnøkkelen er en unik nøkkel for en tabell for å identifisere den bestemte raden i tabellen, og når denne primærnøkkelen brukes i en annen tabell for å lage en-til-en eller en-til-mange eller mange-til-mange-relasjoner, så er det kalles en fremmed nøkkel. Funksjonene til utenlandske nøkler og hvordan disse nøklene kan brukes i MySQL -tabeller er vist i denne artikkelen.

Funksjoner av utenlandske nøkkelbegrensninger:

Noen viktige trekk ved fremmednøkkelbegrensning er forklart nedenfor.







  • Datatypen til den fremmede nøkkelen som brukes i barntabellen, må være den samme som datatypen til hovednøkkelen som brukes i den overordnede tabellen for å referere den utenlandske nøkkelen.
  • Enhver indekskolonne eller flere kolonner kan bare refereres til som en fremmed nøkkel for InnoDB -tabellen.
  • Referanserettigheter eller minst én av privilegiene til SELECT, INSERT, UPDATE og DELETE -setningene 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 ALTER -setningen.

Forutsetning:

Før du oppretter en fremmed nøkkelbegrensning, må du opprette en database og en overordnet tabell med hovednøkkelen. Anta at databasenavnet er ‘ bibliotek 'Og den inneholder to overordnede tabeller med navnet' bøker 'Og' låntaker '. Opprett en forbindelse med MySQL -serveren ved hjelp av mysql klienten og kjør følgende SQL -setninger for å lage databasen og tabellene.



SKAPE DATABASE bibliotek;
BRUK bibliotek;

SKAPE BORD bøker(
id INT IKKE NULL AUTO_INCREMENT ,
tittel varchar (femti) IKKE NULL ,
forfatter varchar (femti) IKKE NULL ,
forlegger varchar (femti) IKKE NULL ,
PRIMÆRNØKKEL (id)
) MOTOR = INNODB ;

SKAPE BORD låntakere(
id VARCHAR (femti) IKKE NULL ,
Navn varchar (femti) IKKE NULL ,
adresse varchar (femti) IKKE NULL ,
e -post varchar (femti) IKKE NULL ,
PRIMÆRNØKKEL (id)
) MOTOR = INNODB ;



Definer fremmednøkkelbegrensning ved hjelp av CREATE -setning

Lag et bord med navnet ' bok_lån_info Med fremmednøkkelbegrensninger ved å utføre følgende uttalelse. Her, den bok_id feltet er et utenlandsk nøkkel for denne tabellen og hver verdi i dette feltet må eksistere i id innen bøker bord. bøker er overordnet bord og bok_lån_info er barnebordet. To begrensninger er også satt med fremmednøkkelen her. Disse er SLETT CASCADE og OPPDATER CASCADE . Det betyr at hvis en primærnøkkel vil fjerne eller oppdatere fra den overordnede tabellen, vil de tilsvarende postene knyttet til barnetabellen knyttet til den utenlandske nøkkelen bli fjernet eller den utenlandske nøkkelen vil bli oppdatert.





SKAPE BORD bok_lån_info(
låne_id VARCHAR (femti),
bok_id INT ,
låne_dato DATO IKKE NULL ,
returdato DATO IKKE NULL ,
status VARCHAR (femten) IKKE NULL ,
INDEKS par_ind(bok_id),
PRIMÆRNØKKEL (låne_id,låne_dato),
UTENLANDSK NØKKEL (bok_id) REFERANSER bøker(id)
SLETT CASCADE
OPPDATER CASCADE
) MOTOR = INNODB ;

Kjør nå følgende SQL -setninger for å sette inn noen poster i begge tabellene. Den første INSERT -setningen vil sette inn fire poster i bøker bord. De fire verdiene til id innen bøker tabellen vil være 1, 2, 3 og 4 for attributtet auto-increment. Den andre INSERT -setningen setter inn fire poster i bok_lån_info basert på id verdien av bøker bord.



SETT INN INN I bøker VERDIER
( NULL , 'Å drepe en sangfugl', 'Harper Lee', 'Grand Central Publishing'),
( NULL , 'Hundre år med ensomhet', 'Garcia Marquez', 'Lutfi Ozkok'),
( NULL , 'En passasje til India', 'Forster, E.M.', 'BBC Hulton Picture Library'),
( NULL , 'Usynlig mann', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');

SETT INN INN I bok_lån_info VERDIER
('123490', 1, '2020-02-15', '2020-02-25', 'Returnert'),
('157643', 2, '2020-03-31', '2020-03-10', 'Avventer'),
('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 feltet for fremmednøkkel i barnetabellen som ikke finnes i hovednøkkelfeltet i overordnetabellen, vil MySQL generere en feil. Følgende SQL -setning vil generere en feil fordi overordnetabellen, bøker inneholder ingen ID -verdi 10 .

SETT INN INN I bok_lån_info VERDIER
('195684', 10, '2020-04-15', '2020-04-30', 'Returnert');

Etter å ha utført følgende DELETE -setning, når den fjerde posten vil bli fjernet fra bøker tabellen og deretter de relaterte postene fra bok_lån_info tabellen vil bli fjernet automatisk for den utenlandske nøkkelen.

SLETT FRA bøker HVOR id= 4;
PLUKKE UT * fra bøker;
PLUKKE UT * fra bok_lån_info;

Definer fremmednøkkelbegrensning ved bruk av ALTER -setning

Sett først inn noen poster i låntakere tabellen, og denne tabellen vil bli definert som overordnet tabell i den neste ALDER uttalelse.

SETT INN INN I låntakere VERDIER
('123490', 'Patrick Wood', '34 West Street LANCASTER LA14 9ZH ', '[e -postbeskyttet]'),
('157643', 'Ezra Martin', '10 The Grove BIRMINGHAM B98 1EU ', '[e -postbeskyttet]'),
('174562', 'John Innes Archie', '55 Main Road LIVERPOOL L2 3OD ', '[e -postbeskyttet]'),
('146788', 'Frederick Hanson', '85 Highfield Road SHREWSBURY SY46 3ME ', '[e -postbeskyttet]');

Kjør følgende ALDER uttalelse for å angi en annen begrensning for utenlandsk nøkkel for bok_lån_info bord for å gjøre forholdet til låntakere bord. Her, låne_id er definert som en fremmed nøkkel for bok_lån_info bord.

ALTER TABLE book_borrow_info ADD CONSTRAINT fk_lower
UTENLANDSK NØKKEL(låne_id)REFERANSER låntakere(id)PÅ SLETT KASKADE PÅ OPPDATERINGSBEGRENSNING;

Sett nå inn en post i bok_lån_info med gyldig låne_id verdi som finnes i id innen låntakere bord. 157643 verdi finnes i låntabellen, og følgende INSERT -setning vil bli utført.

SETT INN INN I bok_lån_info VERDIER
('157643', 1, '2020-03-10', '2020-03-20', 'Returnert');

Følgende INSERT -setning vil generere en feilmelding fordi ID -verdien 195680 eksisterer ikke i låntabellen.

SETT INN INN I bok_lån_info VERDIER
('195680', 1, '2020-04-15', '2020-04-30', 'Returnert');

Konklusjon:

Å definere begrensninger på utenlandske nøkler riktig er en svært viktig oppgave for å lage en relasjonsdatabase og håndtere data blant tabellene på riktig måte. Å vite bruken av utenlandske nøkkelbegrensninger er svært viktig for databasedesignere. Jeg håper denne artikkelen vil hjelpe de nye databasedesignerne til å forstå konseptet med utenlandske nøkkelbegrensninger og bruke dem riktig i oppgavene.