Kuidas kasutada MySQL -i välisvõtmepiiranguid

How Use Mysql Foreign Key Constraints



Välisvõtme piirangut kasutatakse kahe MySQL andmebaasi tabeli vahelise suhte loomiseks. MySQL -i väga oluline omadus on seostatud tabelitele eri tüüpi piirangute seadmine. Tabeli mis tahes võõrvõtme piirangu määratlemiseks peate kasutama teise tabeli primaarvõtit. Esmane võti on tabeli jaoks ainulaadne võti tabeli konkreetse rea tuvastamiseks ja kui seda primaarvõtit kasutatakse teises tabelis, et luua üks-ühele või üks mitmele või palju mitmele suhe, siis nimetatakse võõraks võtmeks. Selles artiklis on toodud võõrvõtmete funktsioonid ja nende võtmete kasutamine MySQL tabelites.

Välisvõti piirangute omadused:

Allpool on selgitatud mõningaid võõrvõtme piirangu olulisi tunnuseid.





  • Alamtabelis kasutatava võõrvõtme andmetüüp peab olema sama esmase võtme andmetüübiga, mida kasutatakse vanemtabelis välisvõti viitamiseks.
  • Igale veerule või mitmele veerule saab viidata ainult InnoDB tabeli võõrkeelena.
  • Võõrvõtme loomiseks on vaja viidete privileege või vähemalt ühte lausete SELECT, INSERT, UPDATE ja DELETE privileege.
  • Välisvõti saab luua kahel viisil. Üks, kasutades lauset CREATE ja teine, kasutades lauset ALTER.

Eeltingimus:

Enne võõrvõtme piirangu loomist peate esmase võtmega looma andmebaasi ja vanema tabeli. Oletame, et andmebaasi nimi on „ raamatukogu 'Ja see sisaldab kahte vanematabelit nimega' raamatud 'Ja' laenuvõtja ’. Looge ühendus MySQL -serveriga, kasutades mysql klient ja käivitage andmebaasi ja tabelite loomiseks järgmised SQL -laused.



LOO DATABASE raamatukogu;
KASUTA raamatukogu;

LOO TABEL raamatud(
id INT MITTE NULL AUTO_INCREMENT ,
tiitel varchar (viiskümmend) MITTE NULL ,
autor varchar (viiskümmend) MITTE NULL ,
kirjastaja varchar (viiskümmend) MITTE NULL ,
ESIMENE VÕTTE (id)
) MOOTOR = INNODB ;

LOO TABEL laenuvõtjad(
id VARCHAR (viiskümmend) MITTE NULL ,
nimi varchar (viiskümmend) MITTE NULL ,
aadress varchar (viiskümmend) MITTE NULL ,
meilile varchar (viiskümmend) MITTE NULL ,
ESIMENE VÕTTE (id)
) MOOTOR = INNODB ;



Määrake välisvõtme piirang CREATE avalduse abil

Looge tabel nimega ' book_borrow_info 'Välisvõti piirangutega, täites järgmise avalduse. Siin, book_id väli on a välisvõti selle tabeli ja selle välja kõik väärtused peavad eksisteerima id väli raamatud tabel. raamatud on vanemate tabel ja book_borrow_info on lastelaud. Siin seatakse välisvõtiga ka kaks piirangut. Need on Kustuta kaskaad ja UPDATE CASCADE . See tähendab, et kui mõni esmane võti eemaldatakse või värskendatakse ema tabelist, eemaldatakse välisvõtmega seotud alamtabeliga seotud kirjed või värskendatakse võõrvõtit.





LOO TABEL book_borrow_info(
laenu_id VARCHAR (viiskümmend),
book_id INT ,
laenukuupäev DATE MITTE NULL ,
tagastamise kuupäev DATE MITTE NULL ,
staatus VARCHAR (viisteist) MITTE NULL ,
INDEKS par_ind(book_id),
ESIMENE VÕTTE (laenu_id,laenukuupäev),
VÄLISVÕTI (book_id) VIITED raamatud(id)
PEAL KUSTUTA KASKAD
PEAL UUENDA KASKAD
) MOOTOR = INNODB ;

Nüüd käivitage mõlema tabeli kirjete lisamiseks järgmised SQL -laused. Esimene avaldus INSERT lisab neli kirjet raamatud tabel. Neli väärtust id väli raamatud tabel on automaatse juurdekasvu atribuudi jaoks 1, 2, 3 ja 4. Teine avaldus INSERT lisab neli kirjet book_borrow_info põhinedes id väärtus raamatud tabel.



SISESTA SISSE raamatud VÄÄRTUSED
( NULL , 'Tappa laulurästast', 'Harper Lee', 'Grand Central Publishing'),
( NULL , 'Sada aastat üksindust', 'Garcia Marquez', 'Lutfi Ozkok'),
( NULL , 'Teekond Indiasse', 'Forster, E. M.', 'BBC Hultoni pilditeek'),
( NULL , 'Nähtamatu mees', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');

SISESTA SISSE book_borrow_info VÄÄRTUSED
(„123490”, 1, „2020-02-15”, „2020-02-25”, 'Tagastatud'),
(„157643”, 2, „2020-03-31”, „2020-03-10”, „Ootel”),
(„174562”, 4, „2020-04-04”, „2020-04-24”, 'Laenatud'),
(„146788”, 3, „2020-04-10”, „2020-01-20”, 'Laenatud');

Kui proovite sisestada alamtabeli võõrvõti väljale väärtuse, mida emalaua esmase võtme väljal pole, tekitab MySQL tõrke. Järgmine SQL -lause tekitab tõrke, kuna vanematabel, raamatud ei sisalda id -väärtust 10 .

SISESTA SISSE book_borrow_info VÄÄRTUSED
('195684', 10, „2020-04-15”, „2020-04-30”, 'Tagastatud');

Pärast järgmise DELETE -lause täitmist, kui neljas kirje eemaldatakse raamatud tabelisse ja seejärel seotud kirjed book_borrow_info tabel eemaldatakse võõrvõtme piirangu tõttu automaatselt.

KUSTUTA Alates raamatud KUS id= 4;
VALI * alates raamatud;
VALI * alates book_borrow_info;

Määrake välisvõtme piirang ALTER -lausega

Sisestage alguses mõned kirjed laenuvõtjad tabel ja see tabel määratletakse järgmises tabelis VANUS avaldus.

SISESTA SISSE laenuvõtjad VÄÄRTUSED
(„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 Peatee LIVERPOOL L2 3OD', '[email protected]'),
(„146788”, 'Frederick Hanson', '85 Highfield Road SHREWSBURY SY46 3ME ', '[email protected]');

Käivitage järgmine VANUS avaldus, et seada uus välisvõti piirang book_borrow_info tabel, millega suhteid luua laenuvõtjad tabel. Siin, laenu_id on määratletud kui välisvõti book_borrow_info tabel.

MUUTME TABEL book_borrow_info LISA KONSTRAINT fk_borrower
VÄLISVÕTI(laenu_id)VÕRDLUSED laenuvõtjad(id)KUSTUTATUD KASKAAD ON UPDATE RESTRICT;

Sisestage nüüd kirje book_borrow_info kehtivaga laenu_id väärtus, mis on olemas id väli laenuvõtjad tabel. 157643 väärtus on laenuvõtjate tabelis olemas ja järgmine INSERT avaldus täidetakse edukalt.

SISESTA SISSE book_borrow_info VÄÄRTUSED
(„157643”, 1, „2020-03-10”, „2020-03-20”, 'Tagastatud');

Järgmine INSERT -lause genereerib veateate, kuna id väärtus 195680 laenuvõtjate tabelis puudub.

SISESTA SISSE book_borrow_info VÄÄRTUSED
(„195680”, 1, „2020-04-15”, „2020-04-30”, 'Tagastatud');

Järeldus:

Võõrvõtmepiirangute õige määratlemine on relatsiooniandmebaasi loomiseks ja tabelite andmete asjakohaseks haldamiseks väga oluline ülesanne. Võõrvõti piirangute kasutamise tundmine on andmebaasi kujundajatele väga oluline. Loodan, et see artikkel aitab uutel andmebaaside kujundajatel mõista võõrpiirangute mõistet ja neid oma ülesannetes õigesti rakendada.