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

MySQL 8.0.11 Installations-Tutorial unter Windows

Dieser Artikel zeichnet das Installationstutorial...

Detaillierte Erklärung des CSS3-Rotationswürfelproblems

3D-Koordinatenkonzept Wenn sich ein Element dreht...

Detailliertes Tutorial zur Überwachung von Nginx/Tomcat/MySQL mit Zabbix

Inhaltsverzeichnis Zabbix überwacht Nginx Zabbix ...

Tipps zum Erstellen zweidimensionaler Arrays in JavaScript

Erstellen eines zweidimensionalen Arrays in Js: Z...

Mehrere Möglichkeiten zur Implementierung eines 0-ms-Verzögerungstimers in js

Inhaltsverzeichnis WarteschlangeMikrotask asynchr...

2017 neueste Version der Windows-Installation MySQL-Tutorial

1. Laden Sie zunächst die neueste Version von MyS...

Unterschiede zwischen proxy_pass in zwei Modulen in nginx

1. Die proxy_pass -Direktive des Moduls 1.ngx_str...

Eine detaillierte Erklärung der subtilen Unterschiede zwischen Readonly und Disabled

Sowohl die Optionen „Nur lesen“ als auch „Deaktivi...

Dynamische SQL-Anweisungsanalyse in Mybatis

Dieser Artikel stellt hauptsächlich die dynamisch...

Versuchen Sie Docker+Nginx, um die Single-Page-Anwendungsmethode bereitzustellen

Von der Entwicklung bis zur Bereitstellung: Mache...