So verwenden Sie MySQL-Fremdschlüsseleinschränkungen

How Use Mysql Foreign Key Constraints



Die Fremdschlüsseleinschränkung wird verwendet, um eine Beziehung zwischen zwei Tabellen in der MySQL-Datenbank herzustellen. Es ist eine sehr wichtige Funktion von MySQL, verschiedene Arten von Einschränkungen für die zugehörigen Tabellen festzulegen. Um eine Fremdschlüsseleinschränkung für eine beliebige Tabelle zu definieren, müssen Sie den Primärschlüssel einer anderen Tabelle verwenden. Der Primärschlüssel ist ein eindeutiger Schlüssel für eine Tabelle, um die bestimmte Zeile in der Tabelle zu identifizieren wird als Fremdschlüssel bezeichnet. Die Funktionen von Fremdschlüsseln und wie diese Schlüssel in MySQL-Tabellen verwendet werden können, werden in diesem Artikel gezeigt.

Merkmale von Fremdschlüsseleinschränkungen:

Einige wichtige Funktionen der Fremdschlüsselbeschränkung werden im Folgenden erläutert.







  • Der Datentyp des Fremdschlüssels, der in der untergeordneten Tabelle verwendet wird, muss mit dem Datentyp des Primärschlüssels übereinstimmen, der in der übergeordneten Tabelle verwendet wird, um auf den Fremdschlüssel zu verweisen.
  • Eine beliebige Indexspalte oder mehrere Spalten können nur für die InnoDB-Tabelle als Fremdschlüssel referenziert werden.
  • Referenzen-Privilegien oder mindestens eines der Privilegien der SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen ist erforderlich, um einen Fremdschlüssel zu erstellen.
  • Ein Fremdschlüssel kann auf zwei Arten erstellt werden. Eine mit der CREATE-Anweisung und eine andere mit der ALTER-Anweisung.

Voraussetzung:

Bevor Sie eine Fremdschlüsseleinschränkung erstellen, müssen Sie eine Datenbank und eine übergeordnete Tabelle mit dem Primärschlüssel erstellen. Angenommen, der Datenbankname lautet ‘ Bücherei ’ und enthält zwei übergeordnete Tabellen namens ‘ Bücher ' und ' Kreditnehmer ’. Stellen Sie eine Verbindung mit dem MySQL-Server her, indem Sie das mysql Client und führen Sie die folgenden SQL-Anweisungen aus, um die Datenbank und die Tabellen zu erstellen.



SCHAFFEN DATENBANK Bücherei;
VERWENDEN Bücherei;

SCHAFFEN TISCH Bücher(
Ich würde INT NICHT NULL AUTO_INCREMENT ,
Titel varchar (fünfzig) NICHT NULL ,
Autor varchar (fünfzig) NICHT NULL ,
Herausgeber varchar (fünfzig) NICHT NULL ,
PRIMÄRSCHLÜSSEL (Ich würde)
) MOTOR = INNODB ;

SCHAFFEN TISCH Kreditnehmer(
Ich würde VARCHAR (fünfzig) NICHT NULL ,
Name varchar (fünfzig) NICHT NULL ,
die Anschrift varchar (fünfzig) NICHT NULL ,
Email varchar (fünfzig) NICHT NULL ,
PRIMÄRSCHLÜSSEL (Ich würde)
) MOTOR = INNODB ;



Definieren Sie die Fremdschlüsseleinschränkung mit der CREATE-Anweisung

Erstellen Sie eine Tabelle mit dem Namen ‘ book_borrow_info ‘ mit Fremdschlüsseleinschränkungen, indem Sie die folgende Anweisung ausführen. Hier das book_id Feld ist a Unbekannter Schlüssel für diese Tabelle und jeder Wert dieses Feldes muss in der Ich würde Bereich Bücher Tisch. Bücher ist die Elterntabelle und book_borrow_info ist die untergeordnete Tabelle. Auch hier werden mit dem Fremdschlüssel zwei Einschränkungen gesetzt. Diese sind KASKADE LÖSCHEN und KASKADE AKTUALISIEREN . Das heißt, wenn ein Primärschlüssel aus der übergeordneten Tabelle entfernt oder aktualisiert wird, werden die entsprechenden Datensätze in Bezug auf die untergeordnete Tabelle in Bezug auf den Fremdschlüssel entfernt oder der Fremdschlüssel aktualisiert.





SCHAFFEN TISCH book_borrow_info(
borg_id VARCHAR (fünfzig),
book_id INT ,
Ausleihdatum DATUM NICHT NULL ,
Rückflugdatum DATUM NICHT NULL ,
Status VARCHAR (fünfzehn) NICHT NULL ,
INDEX par_ind(book_id),
PRIMÄRSCHLÜSSEL (borg_id,Ausleihdatum),
UNBEKANNTER SCHLÜSSEL (book_id) VERWEISE Bücher(Ich würde)
AN LÖSCHEN KASKADE
AN AKTUALISIEREN KASKADE
) MOTOR = INNODB ;

Führen Sie nun die folgenden SQL-Anweisungen aus, um einige Datensätze in beide Tabellen einzufügen. Die erste INSERT-Anweisung fügt vier Datensätze in Bücher Tisch. Die vier Werte von Ich würde Bereich Bücher Tabelle ist 1, 2, 3 und 4 für das Auto-Increment-Attribut. Die zweite INSERT-Anweisung fügt vier Datensätze in book_borrow_info basierend auf Ich würde Wert von Bücher Tisch.



EINFÜGUNG HINEIN Bücher WERTE
( NULL , „Um eine Spottdrossel zu töten“, 'Harper Lee', 'Großer Zentralverlag'),
( NULL , 'Hundert Jahre Einsamkeit', 'Garcia Marquez', „Lutfi Özkok“),
( NULL , „Eine Passage nach Indien“, 'Forster, E. M.', 'BBC Hulton-Bildbibliothek'),
( NULL , 'Unsichtbarer Mann', 'Ralph Ellison', 'Enzyklopädie Britannica, Inc.');

EINFÜGUNG HINEIN book_borrow_info WERTE
('123490', 1, '2020-02-15', '2020-02-25', 'Ist zurückgekommen'),
('157643', 2, '2020-03-31', '2020-03-10', 'Ausstehend'),
('174562', 4, '2020-04-04', '2020-04-24', 'Geliehen'),
('146788', 3, '2020-04-10', '2020-01-20', 'Geliehen');

Wenn Sie versuchen, einen Wert in das Fremdschlüsselfeld der untergeordneten Tabelle einzufügen, der im Primärschlüsselfeld der übergeordneten Tabelle nicht existiert, generiert MySQL einen Fehler. Die folgende SQL-Anweisung generiert einen Fehler, da die übergeordnete Tabelle, Bücher enthält keinen ID-Wert 10 .

EINFÜGUNG HINEIN book_borrow_info WERTE
('195684', 10, '2020-04-15', '2020-04-30', 'Ist zurückgekommen');

Nach der Ausführung der folgenden DELETE-Anweisung, wenn der vierte Datensatz aus der entfernt wird Bücher Tabelle dann die zugehörigen Datensätze aus der book_borrow_info Tabelle wird für die Fremdschlüsseleinschränkung automatisch entfernt.

LÖSCHEN VON Bücher WO Ich würde= 4;
AUSWÄHLEN * von Bücher;
AUSWÄHLEN * von book_borrow_info;

Definieren Sie die Fremdschlüsseleinschränkung mit der ALTER-Anweisung

Fügen Sie zunächst einige Datensätze in Kreditnehmer Tabelle und diese Tabelle wird in der nächsten als übergeordnete Tabelle definiert ALTER Stellungnahme.

EINFÜGUNG HINEIN Kreditnehmer WERTE
('123490', 'Patrick Holz', '34 Weststraße LANCASTER LA14 9ZH', ' [E-Mail geschützt] '),
('157643', 'Esra Martin', '10 Der Hain BIRMINGHAM B98 1EU', ' [E-Mail geschützt] '),
('174562', 'John Innes Archie', '55 Hauptstraße LIVERPOOL L2 3OD', ' [E-Mail geschützt] '),
('146788', 'Friedrich Hanson', '85 Highfield Road SHREWSBURY SY46 3ME', ' [E-Mail geschützt] ');

Führen Sie Folgendes aus ALTER Anweisung, um eine weitere Fremdschlüssel-Einschränkung für . zu setzen book_borrow_info Tisch, um die Beziehung zu machen Kreditnehmer Tisch. Hier, borg_id ist als Fremdschlüssel für . definiert book_borrow_info Tisch.

ALTER TABLE book_borrow_info ADD CONSTRAINT fk_borrower
UNBEKANNTER SCHLÜSSEL(borg_id)REFERENZEN Kreditnehmer(Ich würde)BEI LÖSCHEN CASCADE BEI ​​UPDATE EINSCHRÄNKUNG;

Fügen Sie nun einen Datensatz in book_borrow_info mit gültigem borg_id Wert, der in existiert Ich würde Bereich Kreditnehmer Tisch. 157643 Wert in der Kreditnehmertabelle vorhanden ist und die folgende INSERT-Anweisung erfolgreich ausgeführt wird.

EINFÜGUNG HINEIN book_borrow_info WERTE
('157643', 1, '2020-03-10', '2020-03-20', 'Ist zurückgekommen');

Die folgende INSERT-Anweisung erzeugt eine Fehlermeldung, da der ID-Wert 195680 ist in der Kreditnehmertabelle nicht vorhanden.

EINFÜGUNG HINEIN book_borrow_info WERTE
('195680', 1, '2020-04-15', '2020-04-30', 'Ist zurückgekommen');

Abschluss:

Das richtige Definieren von Fremdschlüsseleinschränkungen ist eine sehr wichtige Aufgabe, um eine relationale Datenbank zu erstellen und die Daten zwischen den Tabellen entsprechend zu verwalten. Für Datenbankdesigner ist es sehr wichtig, die Verwendung von Fremdschlüsseleinschränkungen zu kennen. Ich hoffe, dieser Artikel wird den neuen Datenbankdesignern helfen, das Konzept der Fremdschlüsseleinschränkungen zu verstehen und sie bei ihren Aufgaben richtig anzuwenden.