basics mysql foreign key constraint with examples
Ten samouczek wyjaśnia podstawy ograniczenia klucza obcego MySQL, takie jak jego składnia, jak dodawać, deklarować, usuwać i zmieniać za pomocą przykładów:
Mówiąc najprościej, KLUCZ OBCY służy do łączenia dwóch lub więcej tabel w MySQL.
Tabele MySQL muszą być połączone, aby wyszukiwać i aktualizować różne typy danych w różnych momentach czasu. Dlatego konieczne jest posiadanie punktu łączącego między 2 tabelami.
W tym samouczku omówimy różne zastosowania kluczy obcych oraz sposoby ich deklarowania i zmieniania, a także ograniczenia, jakie ma on względem ogólnej struktury tabeli.
rozwiązywanie problemów z siecią pytania i odpowiedzi na rozmowę kwalifikacyjną pdf
Czego się nauczysz:
KLUCZ OBCY MySQL
Składnia:
CONSTRAINT {constraintName} FOREIGN KEY (referringColumnName) REFERENCES {referredTable}({referredColumn}) ON UPDATE {reference-option} ON DELETE {reference-option}
Powyżej przedstawiono składnię używaną podczas określania klucza OBCEGO w tabeli podczas tworzenia tabeli lub z użyciem Instrukcja ALTER TABLE.
Przyjrzyjmy się różnym składnikom składni:
- constrantName: To jest nazwa symboliczna, którą chcemy zdefiniować dla określonego ograniczenia FK. Jeśli zostanie to pominięte, silnik MySQL automatycznie przypisze nazwę do ograniczenia FK.
- referringColumnName: Jest to kolumna odnosząca się do wartości w innej tabeli, jak określono w kolumnie w tabeli, do której się odwołuje.
- Polecona tabela / tabela nadrzędna: Odnosi się do nazwy tabeli, z której wartości byłyby odniesione.
- Odnośna kolumna: Nazwa kolumny w wskazanej tabeli.
- Opcja odniesienia: Są to akcje, które pojawiają się na obrazie, gdy akcja aktualizacji lub usuwania jest wykonywana na tabeli zawierającej ograniczenie klucza obcego. Zarówno UPDATE, jak i DELETE mogą mieć takie same lub różne opcje odwołań.
W dalszej części tego samouczka dowiemy się o różnych działaniach integralności referencyjnej.
Zobaczmy przykład odniesienia do klucza obcego na przykładzie pracownika / działu. Stworzymy tabelę Department z kolumnami - id działu (int & PRIMARY KEY) i nazwa działu (varchar).
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL, departmentName VARCHAR(100));
Utwórz tabelę Pracownik z kolumnami jak poniżej:
Kolumna | Rodzaj |
---|---|
ID | INT (klucz podstawowy) |
Nazwa | VARCHAR |
dept_id | INT (klucz obcy) przywoływany z tabeli działów |
adres | VARCHAR |
wiek | INT |
ur | DATA |
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE);
Jak widać, w powyższej tabeli Employee zadeklarowaliśmy kolumnę deptId typu Int i zdefiniowaliśmy KLUCZ OBCY z tabeli Departamentu w kolumnie DepartmentId.
Co to zasadniczo oznacza, że kolumna DeptId w tabeli Employee może zawierać tylko wartości z tabeli Department.
Spróbujmy wstawić dane do tych tabel i zobaczmy, jak działa OGRANICZENIE KLUCZA OBCEGO.
- Najpierw utwórz rekord w tabeli Dział i dodaj rekord w tabeli Pracownik odwołujący się do identyfikatora rekordu, który został dodany do tabeli Dział.
INSERT INTO department VALUES (1, 'ENGINEERING') --------- INSERT INTO EMPLOYEE VALUES (1, 'AMIT KUMAR', 'MUMBAI', 32, '1988-02-12',1);
Zobaczysz, że obie instrukcje zostałyby wykonane bez błędów.
- Teraz odwołaj się do wartości identyfikatora działu, która nie istnieje.
Na przykład, w poniższym zapytaniu tworzymy pracownika z nieistniejącym identyfikatorem działu -10
INSERT INTO EMPLOYEE VALUES (1, 'DARREN JOHNSON', 'CHICAGO', 32, '1988-02-12',10);
- W tym scenariuszu otrzymamy błąd jak poniżej:
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`my_sql_foreign_key`.`employee`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`) ON DELETE CASCADE ON UPDATE CASCADE)
Tak więc, ogólnie rzecz biorąc, kiedy definiowane są odwołania do klucza obcego, ważne jest, aby upewnić się, że tabela, do której się odwołujesz, zawiera dane, zanim zostanie przywołana.
Działania związane z uczciwością referencyjną
Najpierw spróbujmy zrozumieć, czym właściwie jest uczciwość referencyjna.
Więzy integralności pomagają utrzymać dane w czystym i spójnym stanie, gdy istnieją tabele powiązane ze sobą za pomocą relacji KLUCZ OBCY.
Mówiąc prosto, integralność referencyjna odnosi się do akcji, której oczekujemy od silnika bazy danych, gdy nastąpi AKTUALIZACJA lub USUNIĘCIE w tabeli, do której się odwołujemy, zawierającej KLUCZ OBCY.
Na przykład, w naszym przykładzie Pracownik / Dział załóżmy, że zmieniamy identyfikator działu dla określonego wiersza w bazie danych. Wówczas wpłynie to na wszystkie wiersze odwołujące się w tabeli Employee. Możemy zdefiniować różne typy scenariuszy integralności referencyjnej, które można zastosować w takich przypadkach.
Uwaga: Więzy integralności definiuje się podczas ustawiania / deklaracji klucza obcego jako część poleceń / sekcji ON DELETE i ON UPDATE.
Zapoznaj się z przykładowym zapytaniem tutaj (dla przykładu pracownika / działu):
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL, departmentName VARCHAR(100)); CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE {ref-integrity-action} ON DELETE {ref integrity action});
Wstaw trochę danych do tych tabel, jak poniżej:
INSERT INTO department VALUES (1, 'ENGINEERING'), (2,'ACCOUNTING'), (3, 'MARKETING'), (4, 'HR'), (5, 'LEGAL'); INSERT INTO EMPLOYEE VALUES (1, 'AMIT KUMAR', 'MUMBAI', 32,'1988-02-12',1), (2, 'RYAN HILMAN', 'SEATTLE',43, '1977-03-15',1), (3, 'KAVITA SINGH', 'DELHI', 42, '1978-02-18',4), (4, 'DAVID BECKHAM', 'LONDON', 40, '1980-07-13',3), (5, 'PRITI KUMARI', 'DELHI', 35, '1985-12-11',2), (6, 'FRANK BALDING', 'NEW YORK', 35, '1985-08-25',5)
Istnieją 4 akcje referencyjne obsługiwane przez MySQL. Spróbujmy zrozumieć każdy z nich.
# 1) KASKADA
Jest to jedno z najczęściej używanych działań związanych z uczciwością referencyjną. Ustawienie DELETE i UPDATE na CASCADE spowoduje zastosowanie zmian dokonanych w tabeli, do której istnieje odniesienie, w tabeli odniesienia, tj. W przykładzie Pracownik / Dział. Załóżmy, że ktoś usunie wiersz w tabeli Dział, który musi powiedzieć, że nazwa_działu = RACHUNKOWOŚĆ, a następnie wszystkie wiersze w tabeli Pracownik, w których identyfikator_ działu jest przypisany do tabeli Księgowość, również zostaną usunięte.
Zrozummy to na przykładzie:
SELECT * FROM employee;
ID | Nazwa | adres | wiek | ur | deptId |
---|---|---|---|---|---|
jeden | AMIT KUMAR | MUMBAI | 32 | 1988-02-12 | jeden |
dwa | RYAN HILMAN | SEATTLE | 43 | 1977-03-15 | jeden |
3 | KAVITA SINGH | DELHI | 42 | 1978-02-18 | 4 |
4 | DAVID BECKHAM | LONDYN | 40 | 1980-07-13 | 3 |
5 | PRITI KUMARI | DELHI | 35 | 1985-12-11 | dwa |
6 | FRANK BALDING | NOWY JORK | 35 | 1985-08-25 | 5 |
Usuń rekord z tabeli Dział, gdzie nazwa działu = „KSIĘGOWOŚĆ”
jak używać thread.sleep w java
DELETE from DEPARTMENT WHERE departmentName='ACCOUNTING';
Ponieważ jest to akcja referencyjna CASCADE, spodziewalibyśmy się, że wszystkie wiersze, które mają identyfikator działu = 2 (czyli dział „RACHUNKOWOŚĆ”), również powinny zostać usunięte. Ponownie wykonajmy zapytanie SELECT w tabeli Employee.
SELECT * FROM employee;
ID | Nazwa | adres | wiek | ur | deptId |
---|---|---|---|---|---|
jeden | AMIT KUMAR | MUMBAI | 32 | 1988-02-12 | jeden |
dwa | RYAN HILMAN | SEATTLE | 43 | 1977-03-15 | jeden |
3 | KAVITA SINGH | DELHI | 42 | 1978-02-18 | 4 |
4 | DAVID BECKHAM | LONDYN | 40 | 1980-07-13 | 3 |
6 | FRANK BALDING | NOWY JORK | 35 | 1985-08-25 | 5 |
Jak widać powyżej, ze względu na integralność referencyjną KASKADY, wiersze w tabeli Pracownik, które odnosiły się do usuniętej kolumny jako KLUCZ OBCY, będą miały usunięte te wiersze.
# 2) OGRANICZENIE / BRAK DZIAŁANIA
Tryb RESTRICT lub NO ACTION nie zezwoli na żadne operacje UPDATE lub DELETE na tabeli zawierającej kolumny, do których w niektórych tabelach odwołuje się klucz OBCY.
Tryb NO ACTION można zastosować, po prostu pomijając klauzule ON UPDATE i ON DELETE w deklaracji tabeli.
Wypróbujmy ten sam przykład iw tym przypadku po prostu pomiń działanie WŁĄCZ AKTUALIZACJĘ i WŁĄCZAJ DO USUŃ Integralność referencyjna.
Teraz, gdy spróbujemy usunąć dowolny wpis w tabeli, do której się odwołuje, otrzymamy błąd, ponieważ ustawiliśmy akcję referencyjną na RESTRICT
DELETE FROM department WHERE departmentName='ACCOUNTING';
Jeśli spróbujesz wykonać powyższe polecenie DELETE, zobaczysz błąd podobny do poniższego.
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`my_sql_foreign_key`.`employee`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`))
# 3) SET NULL
Przy ustawieniu SET NULL każda AKTUALIZACJA lub USUNIĘCIE w tabeli, do której się odwołuje, spowodowałaby zaktualizowanie wartości NULL względem wartości kolumny oznaczonej jako KLUCZ OBCY w tabeli odniesienia.
W przypadku tego referencyjnego działania integralności definicja tabeli Pracownik wyglądałaby następująco:
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON DELETE SET NULL);
Usuń wiersz w tabeli, do której istnieją odwołania, jak pokazano poniżej:
DELETE FROM department WHERE departmentName='ACCOUNTING';
Teraz w tym przypadku odniesiona wartość w tabeli Employee zostanie ustawiona na NULL. Wykonaj zapytanie SELECT w tabeli Employee, aby zobaczyć wyniki.
SELECT * FROM employee;
ID | Nazwa | adres | wiek | ur | deptId |
---|---|---|---|---|---|
jeden | AMIT KUMAR | MUMBAI | 32 | 1988-02-12 | jeden |
dwa | RYAN HILMAN | SEATTLE | 43 | 1977-03-15 | jeden |
3 | KAVITA SINGH | DELHI | 42 | 1978-02-18 | 4 |
4 | DAVID BECKHAM | LONDYN | 40 | 1980-07-13 | 3 |
5 | PRITI KUMARI | DELHI | 35 | 1985-12-11 | ZERO |
6 | FRANK BALDING | NOWY JORK | 35 | 1985-08-25 | 5 |
# 4) USTAW DOMYŚLNE
Określenie trybu SET DEFAULT spowodowałoby zastąpienie wartości domyślnej kolumny (określonej podczas deklaracji kolumny) w przypadku dowolnego DELETES w tabeli, do której się odwołuje.
Uwaga - Jak na Dokumentacja MySQL , opcja SET DEFAULT jest obsługiwana przez MySQL Parser, ale nie silniki DB, takie jak InnoDB. Może to być obsługiwane w przyszłości.
Aby jednak obsługiwać takie zachowanie, można rozważyć użycie polecenia SET NULL i zdefiniować wyzwalacz w tabeli, który może ustawić wartość domyślną.
Dodaj ograniczenie klucza obcego za pomocą instrukcji ALTER TABLE
Wiele razy może się zdarzyć, że będziemy chcieli dodać ograniczenie KLUCZ OBCY do istniejącej tabeli, która go nie ma.
Załóżmy, że w przykładzie Pracownik i dział utworzyliśmy tabelę pracownika bez żadnego ograniczenia KLUCZ OBCY, a później chcemy wprowadzić to ograniczenie. Można to osiągnąć za pomocą polecenia ALTER TABLE.
Spróbujmy to zrozumieć na przykładzie.
Załóżmy, że mamy tabelę Employee z poniższą definicją polecenia CREATE.
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT);
Tutaj mamy kolumnę deptId, ale nie ma ograniczenia FOREIGN KEY. W tym przypadku nawet bez tabeli Dział możemy określić dowolne wartości podczas wstawiania rekordów.
Teraz przypuśćmy później, że mamy oddzielną tabelę Departamentu i chcemy połączyć w niej identyfikator działu jako KLUCZ OBCY z tabelą Pracownik.
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
A jeśli ta tabela zawiera dane? Czy możemy ZMIENIĆ tabelę i dodać ograniczenie klucza obcego?
Odpowiedź brzmi: tak - możemy pod warunkiem, że istniejące wartości w kolumnie, do których będziemy się odwoływać z innej tabeli, powinny mieć te wartości, które istnieją w samej tabeli nadrzędnej.
Utwórz tabelę Employee bez ograniczenia FOREIGN KEY, dodaj trochę danych i spróbuj dodać ograniczenie FOREIGN KEY za pomocą polecenia ALTER.
CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT);
INSERT INTO EMPLOYEE VALUES (1, 'DARREN JOHNSON', 'CHICAGO', 32, '1988-02-12',1); INSERT INTO EMPLOYEE VALUES (2, 'ANITA SHERWIN', 'COLUMBIA', 32, '1988-02-12',10);
Utwórz tabelę działu i dodaj KLUCZ OBCY w polu „deptId” w tabeli Pracownik, jak pokazano poniżej:
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL DEFAULT 1000, departmentName VARCHAR(100));
W tym momencie, jeśli spróbujemy dodać ograniczenie klucza obcego,
ALTER TABLE employee ADD CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE;
Wtedy pojawi się błąd, ponieważ tabela Employee zawiera pewne dane, ale ograniczenie integralności referencyjnej nie może zostać spełnione, ponieważ tabela Department nie zawiera jeszcze danych.
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`my_sql_foreign_key`.`#sql-63_87`, CONSTRAINT `depIdFk` FOREIGN KEY (`deptId`) REFERENCES `department` (`departmentId`) ON DELETE CASCADE ON UPDATE CASCADE)
Aby mieć ograniczenie KLUCZ OBCY, najpierw musimy dodać dane do tabeli Dział. Wstawmy wymagane rekordy do tabeli Dział.
INSERT INTO department VALUES (1, 'ENGINEERING'),(10,'ACCOUNTING');
Dodaj ponownie ograniczenie FOREIGN KEY, wykonując tę samą instrukcję ALTER TABLE. Zauważysz, że tym razem polecenie zakończyło się powodzeniem i tabela Pracownik została pomyślnie zaktualizowana, tak aby zawierała deptId jako KLUCZ OBCY z tabeli Dział.
Porzucenie ograniczenia klucza obcego
Podobnie jak w przypadku dodawania ograniczenia FOREIGN KEY, możliwe jest również usunięcie / usunięcie istniejącego ograniczenia FOREIGN KEY z tabeli.
Można to osiągnąć za pomocą polecenia ALTER TABLE.
Składnia:
ALTER TABLE {childTable} DROP FOREIGN KEY {foreign key constraint name};
Tutaj „childTable” to nazwa tabeli, która ma zdefiniowane ograniczenie OBCE KLUCZ, podczas gdy „nazwa ograniczenia klucza obcego” to nazwa / symbol, który został użyty do zdefiniowania KLUCZA OBCEGO.
Zobaczmy przykład z tabelą Pracownik / Dział. Aby usunąć ograniczenie o nazwie „depIdFk” z tabeli Employee, użyj poniższego polecenia:
ALTER TABLE employee DROP FOREIGN KEY depIdFk;
Często Zadawane Pytania
Q # 1) Jak mogę zmienić klucze obce w MySQL?
Odpowiedź: KLUCZ FOREGIN można dodać / usunąć za pomocą polecenia ALTER TABLE.
Aby zmienić lub dodać nowy KLUCZ OBCY, możesz użyć polecenia ALTER i zdefiniować KLUCZ OBCY oraz kolumnę tabeli referencyjnej, do której będzie się odnosić tabela potomna.
Q # 2) Jak ustawić wiele kluczy obcych w MySQL?
Odpowiedź: Tabela w MySQL może mieć wiele KLAWISZY OBCYCH, które mogą zależeć od tej samej tabeli nadrzędnej lub różnych tabel nadrzędnych.
Skorzystajmy z tabeli Pracownik / Dział i dodajmy KLUCZ OBCY dla nazwy działu oraz Identyfikator działu w tabeli Pracownik.
Zobacz instrukcje CREATE obu tabel, jak poniżej
CREATE TABLE department(departmentId INT PRIMARY KEY NOT NULL DEFAULT 1000, departmentName VARCHAR(100) UNIQUE NOT NULL); ----xxxxx------xxxxx------xxxxx-------xxxxx------xxxxx CREATE TABLE employee(id INT PRIMARY KEY NOT NULL, name VARCHAR(100), address VARCHAR(100), age INT, dob DATE, deptId INT, depName VARCHAR(100), CONSTRAINT depIdFk FOREIGN KEY (deptId) REFERENCES department(departmentId) ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT depNameFk FOREIGN KEY (depName) REFERENCES department(departmentName) ON UPDATE CASCADE ON DELETE CASCADE);
Pytanie 3) Jak wyłączyć ograniczenia klucza obcego w MySQL?
Odpowiedź: Ograniczenia klucza OBCEGO są zwykle wymagane, gdy ktoś próbuje obciąć istniejącą tabelę, do której się odwołuje. Aby to zrobić, możesz użyć poniższego polecenia:
SET FOREIGN_KEY_CHECKS=0;
Spowoduje to ustawienie zmiennej sesji i tymczasowe wyłączenie FOREIGN_KEY_CHECKS. Po tym ustawieniu możesz kontynuować i wykonywać usuwanie / obcinanie, co w innym przypadku nie byłoby możliwe.
Otwórz pliki .jar Windows 10
Ale upewnij się, że jest to uprawnienie administratora i powinno być używane rozważnie.
Q # 4) Jak znaleźć odniesienia do kluczy obcych dla tabeli w MySQL?
Odpowiedź: Aby wyświetlić listę wszystkich istniejących ograniczeń KLUCZA OBCEGO, możesz użyć tabeli „INNODB_FOREIGN_COLS” w „INFORMATION_SCHEMA”.
Po prostu uruchom poniższe polecenie, aby pobrać wszystkie deklaracje KLUCZA OBCEGO istniejące dla danej instancji serwera MySQL.
ID | FOR_COL_NAME | REF_COL_NAME | POS |
---|---|---|---|
my_sql_foreign_key / depIdFk | deptId | DepartmentId | jeden |
P # 5) Czy kolumna, do której odnosi się odwołanie, jako KLUCZ OBCY być kluczem podstawowym w tabeli, do której się odwołuje?
Odpowiedź: Zgodnie z definicją KLUCZA OBCEGO wymagałoby się, aby kolumna, do której odnosi się KLUCZ OBCY, była KLUCZEM PODSTAWOWYM z tabeli, do której się odwołuje.
Jednak w nowszych wersjach MySQL i silniku bazy danych InnoDB można również odwołać się do kolumny z KLUCZEM OBCYM, który ma ograniczenie UNIQUE i niekoniecznie musi być KLUCZEM PODSTAWOWYM.
P # 6) Czy KLUCZ OBCY tworzy INDEKS w MySQL?
Odpowiedź: Zarówno dla ograniczenia klucza podstawowego, jak i unikatowego, MySQL automatycznie tworzy INDEKS dla takich kolumn.
Ponieważ wiemy już, że odwołania do KLUCZA OBCEGO mogą być stosowane tylko do kolumn, które są kluczami podstawowymi lub kolumn, które mają wartości unikatowe, dlatego wszystkie kolumny, które są określane jako KLUCZ OBCY, mają utworzony indeks.
Aby wyświetlić indeks w tabeli, użyj poniższego polecenia:
SHOW INDEX from {dbName.tableName};
Tak więc, dla naszego przykładu Pracownik / Dział, dodaliśmy deptId w Pracownik jako KLUCZ OBCY z tabeli Dział.
Zobaczmy utworzone indeksy w tabelach Pracownik i Dział.
USE my_sql_foreign_key; SHOW INDEX from employee;
Stół | Non_unique | Key_name | Seq_in_index | Nazwa kolumny | Porównanie | Kardynalność | Sub_part | zapakowane | Zero | Typ_indeksu |
---|---|---|---|---|---|---|---|---|---|---|
pracownik | 0 | PODSTAWOWA | jeden | ID | DO | 0 | ZERO | ZERO | BTREE | |
pracownik | jeden | depIdFk | jeden | deptId | DO | 0 | ZERO | ZERO | TAK | BTREE |
Możesz zobaczyć 2 indeksy - jeden jest kluczem podstawowym dla tabeli Employee, a drugi dotyczy klucza OBCEGO, do którego odwołuje się tabela Dział.
SHOW INDEX from department;
Stół | Non_unique | Key_name | Seq_in_index | Nazwa kolumny | Porównanie | Kardynalność | Sub_part | zapakowane | Zero | Typ_indeksu |
---|---|---|---|---|---|---|---|---|---|---|
departament | 0 | PODSTAWOWA | jeden | DepartmentId | DO | 0 | ZERO | ZERO | BTREE |
Tutaj możesz zobaczyć, że w tabeli Dział mamy tylko 1 indeks dla klucza podstawowego (który jest określany jako KLUCZ OBCY w tabeli Pracownik).
Q # 7) Czy klucz obcy może mieć wartość NULL w MySQL?
Odpowiedź: Tak, ustawienie wartości NULL dla kolumny, która ma zależność klucza obcego od innej tabeli, jest całkowicie w porządku. Wskazuje to również na fakt, że NULL nie jest rzeczywistą wartością, dlatego nie jest dopasowywana / porównywana z wartościami w tabeli nadrzędnej.
Wniosek
W tym samouczku poznaliśmy różne koncepcje związane z używaniem KLAWISZY OBCYCH w bazach danych MySQL.
KLUCZ OBCY ułatwia aktualizacje i usuwa z odpowiednimi ograniczeniami, ale czasami posiadanie wielu takich relacji może uczynić cały proces wstawiania i / lub usuwania dość uciążliwym.
Dowiedzieliśmy się, jak tworzyć OBCE KLUCZE i jak możemy zaktualizować i usunąć istniejący OBCY KLUCZ z tabeli podrzędnej. Dowiedzieliśmy się również o różnych działaniach związanych z integralnością referencyjną oraz o tym, jak możemy osiągnąć różne zachowania przy użyciu różnych dostępnych opcji, takich jak KASKADA, BEZ DZIAŁANIA, USTAW NULL itp.
rekomendowane lektury
- MySQL Tworzenie tabeli z przykładami
- MySQL Wstaw do tabeli - Wstaw składnię instrukcji i przykłady
- MySQL - samouczek dotyczący tworzenia widoku z przykładami kodu
- Funkcje MySQL CONCAT i GROUP_CONCAT z przykładami
- Samouczek dotyczący transakcji MySQL z przykładami programowania
- MySQL UNION - kompleksowy samouczek z przykładami Unii
- Jak pobrać MySQL dla Windows i Mac
- Różnica między SQL a MySQL i SQL Server (z przykładami)