Detaillierte Erklärung zum Erstellen einer Datentabelle in MySQL und zum Herstellen von Primär- und Fremdschlüsselbeziehungen

Detaillierte Erklärung zum Erstellen einer Datentabelle in MySQL und zum Herstellen von Primär- und Fremdschlüsselbeziehungen

Vorwort

Beim Anlegen der Primär- und Fremdschlüssel für eine MySQL-Tabelle müssen Sie folgende Punkte beachten:

  • Die Speicher-Engine der beiden Tabellen, die eine Primär- und Fremdschlüsselbeziehung herstellen müssen, muss InnoDB sein.
  • Die Fremdschlüsselspalte und die referenzierende Spalte müssen ähnliche Datentypen aufweisen, das heißt, Datentypen, die implizit konvertiert werden können.
  • Für Fremdschlüsselspalten und Referenzspalten müssen Indizes erstellt werden. Wenn für eine Fremdschlüsselspalte kein Index vorhanden ist, erstellt MySQL automatisch einen.

1. SQL-Anweisung zum Erstellen einer Datentabelle und Festlegen der Primär- und Fremdschlüsselbeziehung

Tabelle demo.ChineseCharInfo erstellen
(
ID int ungleich null auto_increment,
Hanzi varchar(10) nicht null,
Primärschlüssel (ID)
)
Engine=InnoDB Auto_Increment=1 Standard-Zeichensatz=UTF8 Sortierung=UTF8_General_CI;
Tabelle demo erstellen.ChinesePinyinInfo
(
ID int ungleich null auto_increment,
CharID int null,
Pinyin varchar(10) null,
Ton tinyint unsigned null,
Primärschlüssel (ID),
-- Methode 1: Geben Sie keinen Fremdschlüsselnamen an, die Datenbank generiert automatisch einen Fremdschlüssel (CharID), der ChineseCharInfo(ID) bei Löschkaskade und Aktualisierungskaskade referenziert 
-- Methode 2: Geben Sie den Fremdschlüsselnamen (FK_Name) an
-- Einschränkung FK_Name Fremdschlüssel (CharID) verweist auf ChineseCharInfo(ID) bei Löschkaskade bei Aktualisierungskaskade 
)
Engine=InnoDB Auto_Increment=1 Standard-Zeichensatz=UTF8 Sortierung=UTF8_General_CI;

2. Wenn die Datentabelle bereits vorhanden ist, verwenden Sie die folgende Methode, um die Primär- und Fremdschlüsselbeziehung herzustellen

-- Fügen Sie dem Feld (CharID) in der Tabelle (demo.ChinesePinyinInfo) einen Fremdschlüssel hinzu und geben Sie den Fremdschlüsselnamen als (FK_Name) an.
Tabelle demo.ChinesePinyinInfo ändern, Einschränkung FK_Name hinzufügen, Fremdschlüssel (CharID) verweist auf ChineseCharInfo(ID);
-- Fügen Sie dem Feld (CharID) in der Tabelle (demo.ChinesePinyinInfo) einen Fremdschlüssel hinzu. Geben Sie den Fremdschlüsselnamen nicht an. Die Datenbank generiert den Fremdschlüsselnamen automatisch. alter table demo.ChinesePinyinInfo add foreign key (CharID) references ChineseCharInfo(ID);

3. Löschen Sie Primär- und Fremdschlüsseleinschränkungen

- Löschen Sie die automatische Inkrementierung, indem Sie die Spalteneigenschaften ändern. Die erste (ID) ist der ursprüngliche Spaltenname und die zweite (ID) ist der neue Spaltenname. alter table demo.ChinesePinyinInfo change ID ID int not null;
-- Löschen Sie die Primärschlüsseleinschränkung in der Tabelle (demo.ChinesePinyinInfo). Wenn die Primärschlüsselspalte eine Autoinkrementspalte ist, müssen Sie zuerst das Autoinkrement der Spalte löschen. alter table demo.ChinesePinyinInfo drop primary key;
-- Löschen Sie den Fremdschlüssel mit dem Namen (FK_Name) in der Tabelle (demo.ChinesePinyinInfo) „alter table demo.ChinesePinyinInfo drop foreign key FK_Name“;

4. Einschränkungen von Primär- und Fremdschlüsselbeziehungen

Wenn die untergeordnete Tabelle versucht, einen Fremdschlüsselwert zu erstellen, der in der primären Tabelle nicht vorhanden ist, lehnt die Datenbank alle Einfüge- oder Aktualisierungsvorgänge ab.

Wenn die Primärtabelle versucht, vorhandene oder übereinstimmende Fremdschlüsselwerte in der untergeordneten Tabelle zu aktualisieren oder zu löschen, hängt die endgültige Aktion von den Optionen „Beim Löschen“ und „Beim Aktualisieren“ in der Definition der Fremdschlüsseleinschränkung ab.

Sowohl beim Löschen als auch beim Aktualisieren gibt es die folgenden vier Aktionen.

  • Kaskade: Wenn die Haupttabelle die entsprechende Datenzeile löscht oder aktualisiert, löscht oder aktualisiert die Untertabelle auch die Zeilen, die mit der Haupttabelle übereinstimmen (d. h. kaskadierendes Löschen und Aktualisieren).
  • Auf Null setzen: Wenn die Haupttabelle die entsprechenden Daten löscht oder aktualisiert, setzt die Untertabelle auch die Fremdschlüsselspalten der Zeilen, die mit der Haupttabelle übereinstimmen, auf Null. Hat keine Auswirkung, wenn die Fremdschlüsselspalte auf ungleich null gesetzt ist.
  • keine Aktion: Die Datenbank lehnt das Löschen oder Aktualisieren der Primärtabelle ab.
  • einschränken: Die Datenbank weigert sich, die Haupttabelle zu löschen oder zu aktualisieren. Wenn die Aktion „Beim Löschen“ oder „Beim Aktualisieren“ nicht angegeben ist, ist die Standardaktion „Beim Löschen“ oder „Beim Aktualisieren“ „Einschränken“.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • MySQL- und Oracle-Datentypkorrespondenz (tabellarische Form)
  • So erstellen Sie einen Index für eine Join-Tabelle in MySQL
  • Zusammenfassung der MySQL-Fremdschlüsseleinschränkungen und Tabellenbeziehungen
  • Python speichert Daten vom Typ „dict dictionary“ in MySQL und erstellt automatisch Tabellen und Spalten
  • MySQL und PHP Grundlagen und Anwendungsthemen: Erstellen von Datenbanktabellen
  • So erstellen Sie schnell eine Testdatentabelle mit 8 Millionen Einträgen in MySQL
  • MySQL erstellt in der Praxis drei Beziehungstabellen

<<:  Die Umsetzung von Youdas neuem Petite-Vue

>>:  Zabbix konfiguriert DingTalks Alarmfunktion mit Bildern

Artikel empfehlen

Eine kurze Diskussion über die Rolle leerer HTML-Links

Leerer Link: Das heißt, es besteht keine Verbindu...

Vuex implementiert einfache Warenkorbfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Klassischer Beispielcode für JavaScript-Funktionsaufrufe

Inhaltsverzeichnis Klassisches Beispiel für einen...

So erzwingen Sie die vertikale Anzeige auf mobilen Seiten

Ich habe kürzlich bei der Arbeit eine mobile Seit...

Zeichnen Sie ein iPhone basierend auf CSS3

Ergebnis:Implementierungscode html <div Klasse...

Informationen zur Auswahl des Uhrzeit-, Datums- und Zeichenfolgentyps in MySQL

Inhaltsverzeichnis 1. Verwendung von DATETIME und...

Automatisches Laden des Kernelmodul-Overlayfs-Vorgangs beim CentOS-Start

Um Kernelmodule in CentOS automatisch zu laden, k...

So beheben Sie den abnormalen Start von mysql5.7.21

Ein Kollege meldete, dass eine MySQL-Instanz aufg...