Jak korzystać z ograniczeń kluczy obcych MySQL

How Use Mysql Foreign Key Constraints



Ograniczenie klucza obcego służy do tworzenia relacji między dwiema tabelami w bazie danych MySQL. Bardzo ważną cechą MySQL jest ustawianie różnego rodzaju ograniczeń dla powiązanych tabel. Aby zdefiniować jakiekolwiek ograniczenie klucza obcego dla dowolnej tabeli, musisz użyć klucza podstawowego innej tabeli. Klucz podstawowy jest unikalnym kluczem dla tabeli, który identyfikuje konkretny wiersz w tabeli, a gdy ten klucz podstawowy jest używany w innej tabeli do tworzenia relacji jeden do jednego, jeden do wielu lub wiele do wielu, to nazywany jest kluczem obcym. W tym artykule przedstawiono cechy kluczy obcych i sposób ich wykorzystania w tabelach MySQL.

Cechy ograniczeń klucza obcego:

Poniżej wyjaśniono niektóre ważne cechy ograniczenia klucza obcego.







  • Typ danych klucza obcego używanego w tabeli podrzędnej musi być taki sam jak typ danych klucza podstawowego używanego w tabeli nadrzędnej do odwoływania się do klucza obcego.
  • Dowolna kolumna indeksu lub wiele kolumn może odwoływać się jako klucz obcy tylko dla tabeli InnoDB.
  • Do utworzenia klucza obcego wymagane są uprawnienia do odwołań lub co najmniej jedno z uprawnień instrukcji SELECT, INSERT, UPDATE i DELETE.
  • Klucz obcy można utworzyć na dwa sposoby. Jeden przy użyciu instrukcji CREATE, a drugi przy użyciu instrukcji ALTER.

Warunek wstępny:

Przed utworzeniem ograniczenia klucza obcego musisz utworzyć bazę danych i tabelę nadrzędną z kluczem podstawowym. Załóżmy, że nazwa bazy danych to „ Biblioteka ’ i zawiera dwie tabele nadrzędne o nazwie ‘ książki ' oraz ' pożyczający ”. Nawiąż połączenie z serwerem MySQL za pomocą mysql klienta i uruchom następujące instrukcje SQL, aby utworzyć bazę danych i tabele.



STWÓRZ BAZA DANYCH Biblioteka;
POSŁUGIWAĆ SIĘ Biblioteka;

STWÓRZ TABELA książki(
NS WEWN NIE ZERO AUTO_INCREMENT ,
tytuł varchar (pięćdziesiąt) NIE ZERO ,
autor varchar (pięćdziesiąt) NIE ZERO ,
wydawca varchar (pięćdziesiąt) NIE ZERO ,
GŁÓWNY KLUCZ (NS)
) SILNIK = INNODB ;

STWÓRZ TABELA kredytobiorcy(
NS VARCHAR (pięćdziesiąt) NIE ZERO ,
Nazwa varchar (pięćdziesiąt) NIE ZERO ,
adres varchar (pięćdziesiąt) NIE ZERO ,
e-mail varchar (pięćdziesiąt) NIE ZERO ,
GŁÓWNY KLUCZ (NS)
) SILNIK = INNODB ;



Zdefiniuj ograniczenie klucza obcego za pomocą instrukcji CREATE

Utwórz tabelę o nazwie „ book_borrow_info ‘ z ograniczeniami klucza obcego, wykonując poniższą instrukcję. Tutaj identyfikator_książki pole jest klucz obcy dla tej tabeli i każda wartość tego pola musi istnieć w NS pole książki Tabela. książki jest tabelą nadrzędną i book_borrow_info jest tabelą podrzędną. W tym miejscu z kluczem obcym są również ustawione dwa ograniczenia. To są USUŃ KASKADĘ oraz AKTUALIZUJ KASKADĘ . Oznacza to, że jeśli jakikolwiek klucz podstawowy zostanie usunięty lub zaktualizowany z tabeli nadrzędnej, odpowiednie rekordy związane z tabelą podrzędną związaną z kluczem obcym zostaną usunięte lub klucz obcy zostanie zaktualizowany.





STWÓRZ TABELA book_borrow_info(
pożyczka_id VARCHAR (pięćdziesiąt),
identyfikator_książki WEWN ,
pożyczka_data DATA NIE ZERO ,
Data powrotu DATA NIE ZERO ,
status VARCHAR (piętnaście) NIE ZERO ,
INDEKS par_ind(identyfikator_książki),
GŁÓWNY KLUCZ (pożyczka_id,pożyczka_data),
KLUCZ OBCY (identyfikator_książki) BIBLIOGRAFIA książki(NS)
NA KASOWAĆ KASKADA
NA AKTUALIZACJA KASKADA
) SILNIK = INNODB ;

Teraz uruchom następujące instrukcje SQL, aby wstawić niektóre rekordy do obu tabel. Pierwsza instrukcja INSERT wstawi cztery rekordy do książki Tabela. Cztery wartości NS pole książki tabela będzie miała wartość 1, 2, 3 i 4 dla atrybutu auto-inkrementacji. Druga instrukcja INSERT wstawi cztery rekordy do book_borrow_info na podstawie NS wartość książki Tabela.



WSTAWIĆ DO książki WARTOŚCI
( ZERO , 'Zabić drozda', „Harper Lee”, „Grand Central Publishing”),
( ZERO , 'Sto lat samotności', 'Garcia Marquez', „Lutfi Ozkok”),
( ZERO , „Przejście do Indii”, - Forster, E.M., „Biblioteka obrazów BBC Hulton”),
( ZERO , 'Niewidzialny człowiek', „Ralph Ellison”, „Encyklopedia Britannica, Inc.”);

WSTAWIĆ DO book_borrow_info WARTOŚCI
('123490', 1, '2020-02-15', „2020-02-25”, 'Zwrócony'),
('157643', 2, '2020-03-31', '2020-03-10', 'Aż do'),
('174562', 4, '2020-04-04', '2020-04-24', „Pożyczony”),
('146788', 3, '2020-04-10', '2020-01-20', „Pożyczony”);

Jeśli spróbujesz wstawić wartość w polu klucza obcego tabeli podrzędnej, która nie istnieje w polu klucza podstawowego tabeli nadrzędnej, MySQL wygeneruje błąd. Poniższa instrukcja SQL wygeneruje błąd, ponieważ tabela nadrzędna, książki nie zawiera wartości identyfikatora 10 .

WSTAWIĆ DO book_borrow_info WARTOŚCI
('195684', 10, '2020-04-15', „2020-04-30”, 'Zwrócony');

Po wykonaniu poniższej instrukcji DELETE, gdy czwarty rekord zostanie usunięty z książki tabeli, a następnie powiązane rekordy z book_borrow_info tabela zostanie usunięta automatycznie dla ograniczenia klucza obcego.

KASOWAĆ Z książki GDZIE NS= 4;
WYBIERZ * z książki;
WYBIERZ * z book_borrow_info;

Zdefiniuj ograniczenie klucza obcego za pomocą instrukcji ALTER

Najpierw wstaw kilka rekordów do kredytobiorcy tabela i ta tabela zostanie zdefiniowana jako tabela nadrzędna w następnym WIEK oświadczenie.

WSTAWIĆ DO kredytobiorcy WARTOŚCI
('123490', „Patryk Wood”, '34 West Street LANCASTER LA14 9ZH', ' [e-mail chroniony] '),
('157643', „Ezra Martin”, „10 Gaj BIRMINGHAM B98 1EU”, ' [e-mail chroniony] '),
('174562', „John Innes Archie”, '55 Droga Główna LIVERPOOL L2 3OD', ' [e-mail chroniony] '),
('146788', „Frederick Hanson”, '85 Highfield Road SHREWSBURY SY46 3ME', ' [e-mail chroniony] ');

Uruchom następujące WIEK instrukcja do ustawienia innego ograniczenia klucza obcego dla book_borrow_info stół do nawiązania relacji kredytobiorcy Tabela. Tutaj, pożyczka_id jest zdefiniowany jako klucz obcy dla book_borrow_info Tabela.

ALTER TABLE book_borrow_info DODAJ OGRANICZENIE fk_borrower
KLUCZ OBCY(pożyczka_id)REFERENCJE pożyczkobiorcy(NS)PRZY USUWANIU KASKADY PRZY AKTUALIZACJI OGRANICZENIE;

Teraz wstaw rekord do book_borrow_info z ważnym pożyczka_id wartość, która istnieje w NS pole kredytobiorcy Tabela. 157643 wartość istnieje w tabeli pożyczkobiorców, a następująca instrukcja INSERT zostanie pomyślnie wykonana.

WSTAWIĆ DO book_borrow_info WARTOŚCI
('157643', 1, '2020-03-10', '2020-03-20', 'Zwrócony');

Poniższa instrukcja INSERT wygeneruje komunikat o błędzie, ponieważ wartość identyfikatora 195680 nie istnieje w tabeli kredytobiorców.

WSTAWIĆ DO book_borrow_info WARTOŚCI
('195680', 1, '2020-04-15', „2020-04-30”, 'Zwrócony');

Wniosek:

Właściwe zdefiniowanie ograniczeń kluczy obcych jest bardzo ważnym zadaniem przy tworzeniu relacyjnej bazy danych i odpowiednim zarządzaniu danymi między tabelami. Znajomość zastosowań ograniczeń kluczy obcych jest bardzo istotna dla projektantów baz danych. Mam nadzieję, że ten artykuł pomoże nowym projektantom baz danych zrozumieć koncepcję ograniczeń kluczy obcych i odpowiednio je zastosować w swoich zadaniach.