Kaip naudoti „MySQL“ užsienio raktų apribojimus

How Use Mysql Foreign Key Constraints



Užsienio rakto apribojimas naudojamas norint nustatyti ryšį tarp dviejų MySQL duomenų bazės lentelių. Labai svarbi „MySQL“ savybė yra nustatyti skirtingų tipų apribojimus susijusioms lentelėms. Norėdami apibrėžti bet kurio svetimo rakto apribojimą bet kuriai lentelei, turite naudoti kitos lentelės pirminį raktą. Pagrindinis raktas yra unikalus lentelės raktas, skirtas identifikuoti konkrečią lentelės eilutę, o kai šis pirminis raktas naudojamas kitoje lentelėje, kad būtų sukurtas ryšys „vienas su vienu“ arba „vienas su daugeliu“ arba „nuo daugelio iki daugelio“ vadinamas svetimu raktu. Šiame straipsnyje parodytos užsienio raktų savybės ir tai, kaip šiuos raktus galima naudoti MySQL lentelėse.

Užsienio pagrindinių apribojimų ypatybės:

Toliau paaiškinamos kai kurios svarbios užsienio raktų apribojimo savybės.







  • Antrinio rakto, naudojamo antrinėje lentelėje, duomenų tipas turi sutapti su pirminio rakto duomenų tipu, kuris naudojamas pirminėje lentelėje nurodant užsienio raktą.
  • Bet koks rodyklės stulpelis arba keli stulpeliai gali būti nurodyti tik kaip „InnoDB“ lentelės užsienio raktas.
  • Norint sukurti užsienio raktą, reikalingos nuorodų privilegijos arba bent viena iš SELECT, INSERT, UPDATE ir DELETE privilegijų.
  • Užsienio raktą galima sukurti dviem būdais. Vienas naudojant CREATE sakinį, o kitas naudojant ALTER sakinį.

Būtina sąlyga:

Prieš kurdami užsienio rakto apribojimą, turite sukurti duomenų bazę ir pirminę lentelę su pirminiu raktu. Tarkime, kad duomenų bazės pavadinimas yra „ biblioteka “Ir jame yra dvi pagrindinės lentelės, pavadintos„ knygas “Ir„ skolininkas “. Užmegzkite ryšį su „MySQL“ serveriu naudodami mysql klientą ir paleiskite šiuos SQL sakinius, kad sukurtumėte duomenų bazę ir lenteles.



KURTI DUOMENŲ BAZĖ biblioteka;
NAUDOTI biblioteka;

KURTI LENTELĖ knygas(
id INT NE NULL AUTO_INCREMENT ,
titulas varchar (penkiasdešimt) NE NULL ,
autorius varchar (penkiasdešimt) NE NULL ,
leidėjas varchar (penkiasdešimt) NE NULL ,
PAGRINDINIS RAKTAS (id)
) VARIKLIS = INNODB ;

KURTI LENTELĖ skolininkų(
id VARCHAR (penkiasdešimt) NE NULL ,
vardas varchar (penkiasdešimt) NE NULL ,
adresu varchar (penkiasdešimt) NE NULL ,
paštą varchar (penkiasdešimt) NE NULL ,
PAGRINDINIS RAKTAS (id)
) VARIKLIS = INNODB ;



Apibrėžkite užsienio rakto apribojimą naudodami CREATE teiginį

Sukurkite lentelę pavadinimu „ book_borrow_info „Su užsienio raktų apribojimais, vykdydami šį teiginį. Čia, book_id laukas yra a svetimas raktas šioje lentelėje ir kiekvienoje šio lauko reikšmėje turi būti id laukas knygas lentelę. knygas yra pirminis stalas ir book_borrow_info yra vaikų stalas. Čia taip pat nustatyti du apribojimai naudojant užsienio raktą. Šitie yra Ištrinti kaskadą ir ATNAUJINTI KASKADĄ . Tai reiškia, kad jei bet kuris pirminis raktas bus pašalintas arba atnaujintas iš pirminės lentelės, atitinkami įrašai, susiję su antrine lentele, susiję su užsienio raktu, bus pašalinti arba užsienio raktas bus atnaujintas.





KURTI LENTELĖ book_borrow_info(
skolintis_id VARCHAR (penkiasdešimt),
book_id INT ,
skolintis_data DATA NE NULL ,
grįžimo data DATA NE NULL ,
būsena VARCHAR (penkiolika) NE NULL ,
INDEKSAS par_ind(book_id),
PAGRINDINIS RAKTAS (skolintis_id,skolintis_data),
SVETIMAS RAKTAS (book_id) NUORODOS knygas(id)
ĮJUNGTA IŠTRINTI KASKADAS
ĮJUNGTA ATNAUJINTI KASKADAS
) VARIKLIS = INNODB ;

Dabar paleiskite šiuos SQL sakinius, kad įterptumėte kai kuriuos įrašus į abi lenteles. Pirmasis INSERT teiginys įterps keturis įrašus knygas lentelę. Keturios vertės id laukas knygas lentelėje bus 1, 2, 3 ir 4 automatinio didinimo atributas. Antrasis INSERT teiginys įterps keturis įrašus book_borrow_info remiantis id vertė knygas lentelę.



ĮDĖTI Į knygas VERTYBĖS
( NULL , 'Nužudyti strazdą giesmininką', „Harper Lee“, „Grand Central Publishing“),
( NULL , „Šimtas metų vienatvės“, „Garcia Marquez“, „Lutfi Ozkok“),
( NULL , „Kelias į Indiją“, „Forsteris, E. M.“, „BBC Hultono paveikslų biblioteka“),
( NULL , 'Nematomas žmogus', „Ralfas Elisonas“, „Encyclopædia Britannica, Inc.“);

ĮDĖTI Į book_borrow_info VERTYBĖS
(„123490“, 1, „2020-02-15“, „2020-02-25“, „Grįžta“),
(„157643“, 2, „2020-03-31“, „2020-03-10“, 'Kol'),
(„174562“, 4, „2020-04-04“, „2020-04-24“, „Pasiskolinta“),
(„146788“, 3, „2020-04-10“, „2020-01-20“, „Pasiskolinta“);

Jei bandysite įterpti reikšmę į antrinės lentelės svetimo rakto lauką, kurio nėra pirminės lentelės pirminio rakto lauke, tada „MySQL“ sukurs klaidą. Šis SQL sakinys sukurs klaidą, nes pagrindinė lentelė, knygas nėra jokios ID vertės 10 .

ĮDĖTI Į book_borrow_info VERTYBĖS
(„195684“, 10, „2020-04-15“, „2020-04-30“, „Grįžta“);

Įvykdžius šį DELETE sakinį, kai ketvirtasis įrašas bus pašalintas iš knygas lentelę, tada susijusius įrašus iš book_borrow_info lentelė bus automatiškai pašalinta dėl užsienio rakto apribojimo.

IŠTRINTI NUO knygas KUR id= 4;
PASIRINKTI * nuo knygas;
PASIRINKTI * nuo book_borrow_info;

Apibrėžkite užsienio rakto apribojimą naudodami ALTER sakinį

Iš pradžių įterpkite keletą įrašų skolininkų lentelė ir ši lentelė bus apibrėžta kaip pagrindinė lentelė kitoje AMŽIUS pareiškimas.

ĮDĖTI Į skolininkų VERTYBĖS
(„123490“, „Patrick Wood“, „34 West Street LANCASTER LA14 9ZH“, '[apsaugotas el. paštas]'),
(„157643“, „Ezra Martin“, „10 The Grove BIRMINGHAM B98 1EU“, '[apsaugotas el. paštas]'),
(„174562“, „John Innes Archie“, „55 Pagrindinis kelias LIVERPOOL L2 3OD“, '[apsaugotas el. paštas]'),
(„146788“, „Frederikas Hansonas“, „85 Highfield Road SHREWSBURY SY46 3ME“, '[apsaugotas el. paštas]');

Vykdykite šiuos veiksmus AMŽIUS pareiškimą, kad nustatytumėte kitą užsienio rakto apribojimą book_borrow_info lentelę, su kuria užmegzti santykius skolininkų lentelę. Čia, skolintis_id yra apibrėžtas kaip užsienio raktas book_borrow_info lentelę.

PAKEISTI LENTELĘ book_borrow_info PRIDĖTI KONSTRUKCIJĄ fk_borrower
SVETIMAS RAKTAS(skolintis_id)NUORODOS skolininkai(id)IŠTRINANT KASKADĄ ATNAUJINANT RIBOTĄ;

Dabar įterpkite įrašą book_borrow_info su galiojančiu skolintis_id vertę, kuri egzistuoja id laukas skolininkų lentelę. 157643 vertė yra skolininkų lentelėje, o toliau nurodyta INSERT ataskaita bus sėkmingai įvykdyta.

ĮDĖTI Į book_borrow_info VERTYBĖS
(„157643“, 1, „2020-03-10“, „2020-03-20“, „Grįžta“);

Šis INSERT teiginys sukurs klaidos pranešimą, nes ID reikšmė 195680 m nėra skolininkų lentelėje.

ĮDĖTI Į book_borrow_info VERTYBĖS
(„195680“, 1, „2020-04-15“, „2020-04-30“, „Grįžta“);

Išvada:

Tinkamai apibrėžti užsienio raktų apribojimus yra labai svarbi užduotis kuriant santykių duomenų bazę ir tinkamai valdant duomenis tarp lentelių. Duomenų bazių kūrėjams labai svarbu žinoti svetimų raktų apribojimų naudojimą. Tikiuosi, kad šis straipsnis padės naujiems duomenų bazių kūrėjams suprasti užsienio raktų apribojimų sampratą ir tinkamai juos taikyti atliekant užduotis.