Beschreiben Sie kurz die Verwendung und Beschreibung des MySQL-Primärschlüssels und des Fremdschlüssels

Beschreiben Sie kurz die Verwendung und Beschreibung des MySQL-Primärschlüssels und des Fremdschlüssels

1. Fremdschlüsseleinschränkungen

MySQL verwendet Fremdschlüsseleinschränkungen, um die Integrität und Genauigkeit der Daten zwischen Tabellen sicherzustellen.

Was ist ein Fremdschlüssel:

Primärschlüssel: Identifiziert einen Datensatz eindeutig, kann nicht dupliziert werden, darf nicht leer sein und wird verwendet, um die Datenintegrität sicherzustellen

Fremdschlüssel: Dies ist der Primärschlüssel einer anderen Tabelle. Fremdschlüssel können Duplikate enthalten und leer sein. Sie werden verwendet, um Verbindungen mit anderen Tabellen herzustellen. Wenn wir also von Fremdschlüsseln sprechen, müssen mindestens zwei Tabellen beteiligt sein. Beispielsweise die folgenden beiden Tabellen:

Voraussetzungen für die Verwendung von Fremdschlüsseln:

1. Beide Tabellen müssen InnoDB-Tabellen sein. MyISAM-Tabellen unterstützen derzeit keine Fremdschlüssel (es heißt, dass zukünftige Versionen dies möglicherweise unterstützen, aber zumindest derzeit nicht);
2. Die Fremdschlüsselspalte muss einen Index haben. MySQL 4.1.2 und spätere Versionen erstellen beim Erstellen eines Fremdschlüssels automatisch einen Index. Wenn Sie jedoch eine frühere Version verwenden, müssen Sie explizit einen Index erstellen.
3. Die Spalten der beiden Tabellen in der Fremdschlüsselbeziehung müssen ähnliche Datentypen aufweisen, d. h. Spalten, die ineinander konvertiert werden können, z. B. int und tinyint, aber nicht int und char.

Vorteile von Fremdschlüsseln: Sie können zwei Tabellen verknüpfen, die Datenkonsistenz sicherstellen und einige kaskadierende Operationen implementieren.

Die Definitionssyntax eines Fremdschlüssels lautet:

[CONSTRAINT-Symbol] FOREIGN KEY [id] (Indexspaltenname, ...)
REFERENZEN tbl_name (index_col_name, ...)
[BEIM LÖSCHEN {RESTRICT | CASCADE | SET NULL | KEINE AKTION | SET DEFAULT}]
[BEIM UPDATE {RESTRICT | CASCADE | SET NULL | KEINE AKTION | SET DEFAULT}]

Diese Syntax kann in CREATE TABLE und ALTER TABLE verwendet werden. Wenn Sie das Symbol CONSTRAINT nicht angeben, generiert MYSQL automatisch einen Namen.
ON DELETE und ON UPDATE geben Einschränkungen für die Ereignisauslösung an und Sie können Parameter festlegen:

  • RESTRICT (Änderungen an Fremdschlüsseln in Fremdtabellen einschränken)
  • CASCADE (Fremdschlüsseländerungen folgen)
  • SET NULL
  • SET DEFAULT (Den Standardwert festlegen)
  • KEINE AKTION (keine Aktion, Standard)

Einfache Demonstrationsnutzung

Erstellen Sie zwei Tabellen, dage und xiaodi. Die große Brudertabelle ist der Primärschlüssel und die kleine Brudertabelle ist der Fremdschlüssel.

Erstellen Sie eine Tabelle:

CREATE TABLE `dage` (
 `id` int(11) NICHT NULL auto_increment,
 `name` varchar(32) Standard '',
 PRIMÄRSCHLÜSSEL (`id`))
 ENGINE=InnoDB STANDARD-ZEICHENSATZ=latin1;

TABELLE `xiaodi` erstellen (
 `id` int(11) NICHT NULL auto_increment,
 `dage_id` int(11) standardmäßig NULL,
 `name` varchar(32) Standard '',
 Primärschlüssel (`id`),
 SCHLÜSSEL `dage_id` (`dage_id`),
 EINSCHRÄNKUNG `xiaodi_ibfk_1` FREMDER SCHLÜSSEL (`dage_id`) REFERENZEN `dage` (`id`)
)ENGINE=InnoDB STANDARD-CHARSET=latin1;

Füge einen großen Bruder ein:

mysql> in dage(Name) Werte einfügen('Causeway Bay');
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)
mysql> wähle * von Tag;
+----+--------+
| Ich würde | Name |
+----+--------+
| 1 | Causeway Bay |
+----+--------+
1 Zeile im Satz (0,00 Sek.)

Füge einen kleinen Bruder ein:

mysql> einfügen in xiaodi(dage_id,name) Werte(1,'Causeway Bay_Little Brother A');
Abfrage OK, 1 Zeile betroffen (0,02 Sek.)

mysql> wähle * von xiaodi;
+----+---------+--------------+
| ID | Tages-ID | Name |
+----+---------+--------------+
| 1 | 1 | Causeway Bay_Kleiner Bruder A |
+----+---------+--------------+

Den großen Bruder löschen:

mysql> löschen von Tag, wo ID=1;
FEHLER 1451 (23000): Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl (`bstar/xiaodi`, EINSCHRÄNKUNG `xiaodi_ibfk_1` FREMDER SCHLÜSSEL (`dage_id`) VERWEISE `dage` (`id`))

Tipp: Nein, es gibt Einschränkungen. Der große Bruder hat jüngere Brüder unter sich, er kann uns nicht im Stich lassen!

Neues Kind einfügen:

mysql> einfügen in xiaodi(dage_id,name) Werte(2,'旺角_小弟A');              
FEHLER 1452 (23000): Eine untergeordnete Zeile kann nicht hinzugefügt oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl (`bstar/xiaodi`, EINSCHRÄNKUNG `xiaodi_ibfk_1` FREMDER SCHLÜSSEL (`dage_id`) VERWEISE `dage` (`id`))

Tipp: Junge, du willst rebellieren! Du hast noch keinen großen Bruder!

Fügen Sie Ereignisauslöserbeschränkungen zu Fremdschlüsseleinschränkungen hinzu:

mysql> zeige, erstelle Tabelle xiaodi;

 EINSCHRÄNKUNG `xiaodi_ibfk_1` FREMDER SCHLÜSSEL (`dage_id`) REFERENZEN `dage` (`id`)

mysql> Tabelle ändern, xiaodi, Fremdschlüssel löschen, xiaodi_ibfk_1;
Abfrage OK, 1 Zeile betroffen (0,04 Sek.)
Datensätze: 1 Duplikate: 0 Warnungen:
mysql> Tabelle ändern xiaodi, Fremdschlüssel (dage_id) hinzufügen, Referenzen auf dage(id) beim Löschen der Kaskade beim Aktualisieren der Kaskade;
Abfrage OK, 1 Zeile betroffen (0,04 Sek.)
Datensätze: 1 Duplikate: 0 Warnungen: 0

Versuchen Sie erneut, den großen Bruder zu löschen:

mysql> löschen von Tag, wo ID=1;
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)

mysql> wähle * von Tag;
Leerer Satz (0,01 Sek.)

mysql> wähle * von xiaodi;
Leerer Satz (0,00 Sek.)

Ups, diesmal ist der entsprechende jüngere Bruder weg, das geht nicht, wer hat dir gesagt, dass du bei mir die Kaskade löschen sollst (Kaskadenbeschränkung)!

Zu beachtende Punkte

  • Stimmt der Tabellenname überein?
  • Stimmen die Felder in der Tabelle überein?
  • Ist der mit dem Fremdschlüssel verknüpfte Schlüssel der Primärschlüssel einer anderen Tabelle?

Dies ist das Ende dieses Artikels mit der kurzen Einführung in die Verwendung und Beschreibung von MySQL-Primärschlüsseln und -Fremdschlüsseln. Weitere relevante MySQL-Primärschlüssel und -Fremdschlüssel finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Ein kurzes Tutorial zum Verständnis von Primärschlüsseln und Fremdschlüsseln in MySQL
  • MySQL-Anweisungen zum Erstellen von Primärschlüsseln, Fremdschlüsseln und zusammengesetzten Primärschlüsseln
  • Detaillierte Erklärung zum Erstellen einer Datentabelle in MySQL und zum Herstellen von Primär- und Fremdschlüsselbeziehungen

<<:  N Möglichkeiten, die letzte Listenzeile im CSS-Flex-Layout linksbündig auszurichten (Zusammenfassung)

>>:  Wozu dient das Feld „enctype“ beim Hochladen von Dateien?

Artikel    

Artikel empfehlen

Der URL-Wert des SRC- oder CSS-Hintergrundbildes ist der Base64-codierte Code

Möglicherweise ist Ihnen aufgefallen, dass auf die...

Details zu gängigen Javascript-Funktionen höherer Ordnung

Inhaltsverzeichnis 1. Gemeinsame Funktionen höher...

Erfahrungsaustausch über die Priorität des Ladens von CSS-Stilen

Während der Projektentwicklung bin ich gestern auf...

JavaScript zum Erzielen eines Fortschrittsbalkeneffekts

In diesem Artikelbeispiel wird der spezifische Ja...

JavaScript zum Erzielen eines einfachen Drag-Effekts

In diesem Artikel wird der spezifische JavaScript...

Zusammenfassung der gebräuchlichen Buchstaben in Unicode

Die meisten der ersten Computer konnten nur ASCII...

Beispielanalyse der MySQL-Benutzerrechteverwaltung

Dieser Artikel beschreibt das Beispiel der MySQL-...

So verwalten Sie zwischengespeicherte Seiten in Vue

Inhaltsverzeichnis Problem 1: Zerstörung 1. Wie m...