Paano gamitin ang MySQL Foreign Key Constraints

How Use Mysql Foreign Key Constraints



Ginagamit ang banyagang pangunahing hadlang upang makagawa ng isang ugnayan sa pagitan ng dalawang mga talahanayan sa MySQL database. Napakahalagang tampok ng MySQL upang magtakda ng iba't ibang mga uri ng paghihigpit sa mga nauugnay na talahanayan. Upang tukuyin ang anumang banyagang pagpilit ng key para sa anumang talahanayan kailangan mong gamitin ang pangunahing key ng isa pang talahanayan. Ang pangunahing susi ay isang natatanging susi para sa isang talahanayan upang makilala ang partikular na hilera sa talahanayan at kapag ang pangunahing key na ito ay ginagamit sa isa pang talahanayan upang makagawa ng isa-sa-isa o isa-sa-marami o maraming-sa-maraming relasyon pagkatapos nito ay tinatawag na banyagang susi. Ang mga tampok ng mga banyagang key at kung paano magagamit ang mga key na ito sa mga talahanayan ng MySQL ay ipinapakita sa artikulong ito.

Mga Tampok ng Foreign Key Constraints:

Ang ilang mahahalagang tampok ng banyagang pangunahing pagpipigil ay ipinaliwanag sa ibaba.







  • Ang uri ng data ng banyagang susi na ginagamit sa talahanayan ng bata ay dapat na pareho sa uri ng data ng pangunahing susi na ginagamit sa talahanayan ng magulang upang mag-refer sa banyagang susi.
  • Anumang haligi ng index o maraming mga haligi ay maaaring sumangguni bilang isang banyagang susi para sa talahanayan ng InnoDB lamang.
  • Ang mga pribilehiyo ng sanggunian o hindi bababa sa isa sa mga pribilehiyo ng PILI, INSERT, UPDATE at Tanggalin ang mga pahayag ay kinakailangan upang lumikha ng isang banyagang susi.
  • Ang isang banyagang susi ay maaaring malikha sa dalawang paraan. Isa sa pamamagitan ng paggamit ng NILIKAD na pahayag at isa pa sa pamamagitan ng paggamit ng ALTER na pahayag.

Pangangailangan:

Bago lumikha ng isang banyagang pagpilit ng key, kailangan mong lumikha ng isang database at talahanayan ng magulang na may pangunahing susi. Ipagpalagay na ang pangalan ng database ay ' silid aklatan 'At naglalaman ito ng dalawang mga talahanayan ng magulang na pinangalanang' mga libro 'At' nanghihiram ’. Gumawa ng isang koneksyon sa MySQL server gamit ang MySQL client at patakbuhin ang mga sumusunod na pahayag ng SQL upang likhain ang database at ang mga talahanayan.



LILIKHA DATABASE silid aklatan;
PAGGAMIT silid aklatan;

LILIKHA TABLE mga libro(
id INT HINDI WALA AUTO_INCREMENT ,
pamagat varchar (limampu) HINDI WALA ,
may akda varchar (limampu) HINDI WALA ,
publisher varchar (limampu) HINDI WALA ,
PANGUNAHING SUSI (id)
) ENGINE = INNODB ;

LILIKHA TABLE nanghiram(
id VARCHAR (limampu) HINDI WALA ,
pangalan varchar (limampu) HINDI WALA ,
address varchar (limampu) HINDI WALA ,
email varchar (limampu) HINDI WALA ,
PANGUNAHING SUSI (id)
) ENGINE = INNODB ;



Tukuyin ang Batayan sa Pagpipilit ng dayuhan gamit ang pahayag na CREATE

Lumikha ng isang talahanayan na nagngangalang ‘ book_borrow_info 'Na may mga hadlang na dayuhan sa pamamagitan ng pagpapatupad ng sumusunod na pahayag. Narito, ang libro_id ang patlang ay a dayuhang susi para sa talahanayan na ito at bawat halaga ng patlang na ito ay dapat na mayroon sa id larangan ng mga libro mesa mga libro ay ang talahanayan ng magulang at book_borrow_info ay ang mesa ng bata. Ang dalawang mga paghihigpit ay itinatakda din kasama ang dayuhang susi dito. Ito ang TANGGALIN CASCADE at UPDATE CASCADE . Nangangahulugan iyon kung ang anumang pangunahing key ay aalisin o mai-update mula sa talahanayan ng magulang kung gayon ang mga kaukulang talaan na nauugnay sa talahanayan ng bata na nauugnay sa banyagang susi ay aalisin o ang banyagang susi ay maa-update.





LILIKHA TABLE book_borrow_info(
manghiram_id VARCHAR (limampu),
libro_id INT ,
manghiram PETSA HINDI WALA ,
bumalik_date PETSA HINDI WALA ,
katayuan VARCHAR (labinlimang) HINDI WALA ,
INDEX par_ind(libro_id),
PANGUNAHING SUSI (manghiram_id,manghiram),
DAYUHANG SUSI (libro_id) Sanggunian mga libro(id)
ON na TANGGALIN CASCADE
ON na UPDATE CASCADE
) ENGINE = INNODB ;

Ngayon, patakbuhin ang mga sumusunod na pahayag ng SQL upang magsingit ng ilang mga tala sa parehong mga talahanayan. Ang unang pahayag ng INSERT ay maglalagay ng apat na talaan sa mga libro mesa Ang apat na halaga ng id larangan ng mga libro ang talahanayan ay magiging 1, 2, 3 at 4 para sa katangian ng auto-increment. Ang pangalawang pahayag ng INSERT ay maglalagay ng apat na talaan sa book_borrow_info batay sa id halaga ng mga libro mesa



INSERT SA mga libro VALUES
( WALA , 'To Kill a Mockingbird', 'Harper Lee', 'Grand Central Publishing'),
( WALA , 'Isang Daang Taon ng Pag-iisa', 'Garcia Marquez', 'Lutfi Ozkok'),
( WALA , 'Isang Daan sa India', 'Forster, E.M.', 'BBC Hulton Picture Library'),
( WALA , 'Hindi Makita na Tao', 'Ralph Ellison', 'Encyclopædia Britannica, Inc.');

INSERT SA book_borrow_info VALUES
('123490', 1, '2020-02-15', '2020-02-25', 'Bumalik'),
('157643', 2, '2020-03-31', '2020-03-10', 'Nakabinbin'),
('174562', 4, '2020-04-04', '2020-04-24', 'Pinahiram'),
('146788', 3, '2020-04-10', '2020-01-20', 'Pinahiram');

Kung susubukan mong maglagay ng isang halaga sa patlang ng banyagang key ng talahanayan ng bata na hindi umiiral sa pangunahing pangunahing patlang ng talahanayan ng magulang pagkatapos ay makagawa ang MySQL ng isang error. Ang sumusunod na pahayag ng SQL ay makakabuo ng isang error dahil sa talahanayan ng magulang, mga libro walang naglalaman ng anumang halaga ng id 10 .

INSERT SA book_borrow_info VALUES
('195684', 10, '2020-04-15', '2020-04-30', 'Bumalik');

Matapos maipatupad ang sumusunod na pahayag na TANGGALIN, kung kailan aalisin ang ikaapat na tala mula sa mga libro talahanayan pagkatapos ng mga kaugnay na tala mula sa book_borrow_info talahanayan ay awtomatikong aalisin para sa banyagang key hadlang.

TANGGALIN MULA SA mga libro SAAN id= 4;
PUMILI * mula sa mga libro;
PUMILI * mula sa book_borrow_info;

Tukuyin ang Batayan sa Pagpipilit ng dayuhan gamit ang ALTER na pahayag

Sa una, ipasok ang ilang mga talaan sa nanghiram ang talahanayan at ang talahanayan na ito ay matutukoy bilang talahanayan ng magulang sa susunod NAGIGING EDAD pahayag.

INSERT SA nanghiram VALUES
('123490', 'Patrick Wood', '34 West Street LANCASTER LA14 9ZH ', '[Protektado ang email]'),
('157643', 'Ezra Martin', '10 The Grove BIRMINGHAM B98 1EU ', '[Protektado ang email]'),
('174562', 'John Innes Archie', '55 Main Road LIVERPOOL L2 3OD ', '[Protektado ang email]'),
('146788', 'Frederick Hanson', '85 Highfield Road SHREWSBURY SY46 3ME ', '[Protektado ang email]');

Patakbuhin ang sumusunod NAGIGING EDAD pahayag upang magtakda ng isa pang banyagang pangunahing hadlang para sa book_borrow_info mesa upang makagawa ng relasyon sa nanghiram mesa Dito, manghiram_id ay tinukoy bilang isang banyagang susi para sa book_borrow_info mesa

ALTER TABLE book_borrow_info ADD CONSTRAINT fk_borrower
DAYUHANG SUSI(manghiram_id)SANGGUNIAN nanghiram(id)SA TANGGALIN CASCADE SA UPDATE RESTRICT;

Ngayon, magsingit ng isang talaan sa book_borrow_info may wastong manghiram_id halaga na mayroon sa id larangan ng nanghiram mesa 157643 ang halaga ay umiiral sa talahanayan ng mga nanghiram at ang sumusunod na pahayag na INSERT ay matagumpay na naisasagawa.

INSERT SA book_borrow_info VALUES
('157643', 1, '2020-03-10', '2020-03-20', 'Bumalik');

Ang sumusunod na pahayag ng INSERT ay bubuo ng isang mensahe ng error dahil ang halaga ng id 195680 ay wala sa talahanayan ng mga nanghihiram.

INSERT SA book_borrow_info VALUES
('195680', 1, '2020-04-15', '2020-04-30', 'Bumalik');

Konklusyon:

Ang pagtukoy ng maayos na mga hadlang ng dayuhan ay isang napakahalagang gawain para sa paglikha ng isang pangkaugnay na database at pamahalaan ang data sa mga talahanayan nang naaangkop. Ang pag-alam sa mga paggamit ng mga banyagang pangunahing hadlang ay napakahalaga para sa mga taga-disenyo ng database. Inaasahan kong makakatulong ang artikulong ito sa mga bagong taga-disenyo ng database upang maunawaan ang konsepto ng mga banyagang pangunahing hadlang at mailapat ang mga ito nang maayos sa kanilang mga gawain.