Kā izmantot MySQL ārējo atslēgu ierobežojumus

How Use Mysql Foreign Key Constraints



Ārējās atslēgas ierobežojums tiek izmantots, lai izveidotu attiecības starp divām MySQL datu bāzes tabulām. Ļoti svarīga MySQL iezīme ir noteikt dažāda veida ierobežojumus saistītajām tabulām. Lai definētu jebkuru ārējās atslēgas ierobežojumu jebkurai tabulai, jāizmanto citas tabulas primārā atslēga. Primārā atslēga ir unikāla atslēga tabulai, lai identificētu konkrēto tabulas rindu, un, ja šī primārā atslēga tiek izmantota citā tabulā, lai izveidotu attiecības viens pret vienu vai viens pret daudziem vai daudzi no daudziem, tad tā sauc par svešu atslēgu. Šajā rakstā ir parādītas ārējo atslēgu funkcijas un to, kā šīs atslēgas var izmantot MySQL tabulās.

Ārvalstu atslēgu ierobežojumu iezīmes:

Tālāk ir izskaidrotas dažas svarīgas ārējo atslēgu ierobežojuma iezīmes.







  • Pakārtotajā tabulā izmantotās ārējās atslēgas datu tipam jābūt vienādam ar primārās atslēgas datu tipu, kas tiek izmantots vecāku tabulā, lai atsauktos uz ārējo atslēgu.
  • Uz jebkuru indeksa kolonnu vai vairākām kolonnām var atsaukties tikai uz InnoDB tabulas ārējo atslēgu.
  • Lai izveidotu ārējo atslēgu, ir nepieciešamas atsauču privilēģijas vai vismaz viena no SELECT, INSERT, UPDATE un DELETE privilēģijām.
  • Ārvalstu atslēgu var izveidot divos veidos. Viens, izmantojot paziņojumu CREATE, un otrs, izmantojot ALTER paziņojumu.

Priekšnosacījums:

Pirms svešas atslēgas ierobežojuma izveides jums ir jāizveido datu bāze un vecāku tabula ar primāro atslēgu. Pieņemsim, ka datu bāzes nosaukums ir “ bibliotēka 'Un tajā ir divas vecāku tabulas ar nosaukumu' grāmatas ' un ' aizņēmējs ’. Izveidojiet savienojumu ar MySQL serveri, izmantojot mysql klientu un palaidiet šādus SQL paziņojumus, lai izveidotu datu bāzi un tabulas.



RADĪT DATU BĀZE bibliotēka;
LIETOT bibliotēka;

RADĪT TABULA grāmatas(
id INT NULL AUTO_INCREMENT ,
titulu varchar (piecdesmit) NULL ,
autors varchar (piecdesmit) NULL ,
izdevējs varchar (piecdesmit) NULL ,
PRIMĀRĀ ATSLĒGTA (id)
) DZINĒJS = INNODB ;

RADĪT TABULA aizņēmēji(
id VARCHAR (piecdesmit) NULL ,
vārds varchar (piecdesmit) NULL ,
adrese varchar (piecdesmit) NULL ,
e -pastu varchar (piecdesmit) NULL ,
PRIMĀRĀ ATSLĒGTA (id)
) DZINĒJS = INNODB ;



Definējiet ārējās atslēgas ierobežojumu, izmantojot paziņojumu CREATE

Izveidojiet tabulu ar nosaukumu ' book_borrow_info “Ar ārvalstu atslēgas ierobežojumiem, izpildot šādu paziņojumu. Lūk, book_id lauks ir a sveša atslēga šai tabulai un katrai šī lauka vērtībai ir jābūt id lauks grāmatas tabula. grāmatas ir vecāku tabula un book_borrow_info ir bērnu galds. Ar ārējo atslēgu šeit ir noteikti arī divi ierobežojumi. Šie ir DELETE CASCADE un ATJAUNINĀT KASKĀDI . Tas nozīmē, ka, ja kāda primārā atslēga tiks noņemta vai atjaunināta no vecāku tabulas, tad ar ārējo atslēgu saistītie attiecīgie ieraksti, kas saistīti ar pakārtoto tabulu, tiks noņemti vai ārējā atslēga tiks atjaunināta.





RADĪT TABULA book_borrow_info(
aizņemties_id VARCHAR (piecdesmit),
book_id INT ,
aizņemties_datums DATUMS NULL ,
atgriešanās_datums DATUMS NULL ,
statuss VARCHAR (piecpadsmit) NULL ,
INDEKSS par_ind(book_id),
PRIMĀRĀ ATSLĒGTA (aizņemties_id,aizņemties_datums),
SVEŠA ATSLĒGA (book_id) ATSAUCES grāmatas(id)
IESLĒGTS DZĒST KASKĀDE
IESLĒGTS ATJAUNINĀT KASKĀDE
) DZINĒJS = INNODB ;

Tagad palaidiet šādus SQL paziņojumus, lai abās tabulās ievietotu dažus ierakstus. Pirmajā INSERT paziņojumā tiks ievietoti četri ieraksti grāmatas tabula. Četras vērtības id lauks grāmatas tabula būs 1, 2, 3 un 4 automātiskās palielināšanas atribūtam. Otrajā INSERT paziņojumā tiks ievietoti četri ieraksti book_borrow_info pamatojoties uz id vērtība grāmatas tabula.



IEVIETOT INTO grāmatas VĒRTĪBAS
( NULL , 'Nogalināt lakstīgalu', 'Hārpers Lī', 'Grand Central Publishing'),
( NULL , 'Simts vientulības gadi', 'Garsija Markess', 'Lutfi Ozkok'),
( NULL , 'Ceļš uz Indiju', 'Forsters, E.M.', 'BBC Hultona attēlu bibliotēka'),
( NULL , 'Neredzamais cilvēks', 'Ralfs Elisons', 'Encyclopædia Britannica, Inc.');

IEVIETOT INTO book_borrow_info VĒRTĪBAS
(“123490”, 1, '2020-02-15', '2020-02-25', 'Atgriezts'),
(“157643”, 2, “2020-03-31”, '2020-03-10', 'Gaida'),
('174562', 4, “2020-04-04”, '2020-04-24', 'Aizņemts'),
(“146788”, 3, '2020-04-10', “2020-01-20”, 'Aizņemts');

Ja mēģināt bērna tabulas ārējās atslēgas laukā ievietot vērtību, kas nepastāv vecāku tabulas primārās atslēgas laukā, MySQL radīs kļūdu. Šis SQL paziņojums radīs kļūdu, jo vecāku tabula, grāmatas nesatur nevienu ID vērtību 10 .

IEVIETOT INTO book_borrow_info VĒRTĪBAS
('195684', 10, '2020-04-15', “2020-04-30”, 'Atgriezts');

Pēc šāda paziņojuma DELETE izpildes, kad ceturtais ieraksts tiks noņemts no grāmatas tabulu, tad saistītos ierakstus no book_borrow_info tabula tiks automātiski noņemta ārējās atslēgas ierobežojuma dēļ.

DZĒST NO grāmatas KUR id= 4;
SELECT * no grāmatas;
SELECT * no book_borrow_info;

Definējiet ārējās atslēgas ierobežojumu, izmantojot ALTER paziņojumu

Sākumā ievietojiet dažus ierakstus aizņēmējiem tabulu, un šī tabula tiks definēta kā vecāku tabula nākamajā VECUMS paziņojums, apgalvojums.

IEVIETOT INTO aizņēmēji VĒRTĪBAS
(“123490”, 'Patriks Vuds', '34 West Street LANCASTER LA14 9ZH', '[aizsargāts ar e -pastu]'),
(“157643”, 'Ezra Mārtins', '10 The Grove BIRMINGHAM B98 1EU', '[aizsargāts ar e -pastu]'),
('174562', Džons Inness Ārčijs, '55 Galvenais ceļš LIVERPOOL L2 3OD', '[aizsargāts ar e -pastu]'),
(“146788”, 'Frederiks Hansons', '85 Highfield Road SHREWSBURY SY46 3ME ', '[aizsargāts ar e -pastu]');

Izpildiet tālāk norādīto VECUMS paziņojumu, lai noteiktu citu ārējās atslēgas ierobežojumu book_borrow_info tabulu, lai izveidotu attiecības aizņēmēji tabula. Šeit, aizņemties_id ir definēta kā ārējā atslēga book_borrow_info tabula.

ALTER TABLE book_borrow_info PIEVIENOT KONSTRUKCIJU fk_borrower
SVEŠA ATSLĒGA(aizņemties_id)ATSAUCES aizņēmēji(id)UZ DZĒST KASKĀDI ATJAUNINĀT IEROBEŽOJUMU;

Tagad ievietojiet ierakstu book_borrow_info ar derīgu aizņemties_id vērtība, kas pastāv id lauks aizņēmēji tabula. 157643 vērtība pastāv aizņēmēju tabulā, un šis INSERT paziņojums tiks veiksmīgi izpildīts.

IEVIETOT INTO book_borrow_info VĒRTĪBAS
(“157643”, 1, '2020-03-10', '2020-03-20', 'Atgriezts');

Šis paziņojums INSERT ģenerēs kļūdas ziņojumu, jo id vērtība 195680 nav aizņēmēju tabulā.

IEVIETOT INTO book_borrow_info VĒRTĪBAS
('195680', 1, '2020-04-15', “2020-04-30”, 'Atgriezts');

Secinājums:

Pareiza ārējo atslēgu ierobežojumu noteikšana ir ļoti svarīgs uzdevums, lai izveidotu relāciju datu bāzi un atbilstoši pārvaldītu datus starp tabulām. Datu bāzu izstrādātājiem ir ļoti svarīgi zināt ārējo atslēgu ierobežojumu izmantošanas iespējas. Es ceru, ka šis raksts palīdzēs jaunajiem datu bāzes izstrādātājiem izprast ārējo atslēgu ierobežojumu jēdzienu un pareizi tos pielietot savos uzdevumos.