Heim >Datenbank >MySQL-Tutorial >MySQL-Fremdschlüsseleinstellungen

MySQL-Fremdschlüsseleinstellungen

PHPz
PHPzOriginal
2023-05-14 10:24:094463Durchsuche

MySQL ist eines der beliebtesten relationalen Open-Source-Datenbankverwaltungssysteme. Obwohl MySQL sehr leistungsfähig ist, wird es manchmal sehr komplex und verursacht Probleme, wenn es mit komplexen Datentabellenstrukturen und -beziehungen konfrontiert wird. Um dieses Problem zu lösen, bietet MySQL Fremdschlüsseleinschränkungen. Fremdschlüsseleinschränkungen sind eine Möglichkeit, die Integrität von Beziehungen zwischen Datentabellen sicherzustellen. In diesem Artikel befassen wir uns mit den Fremdschlüsseleinstellungen von MySQL und zugehörigen Anwendungen.

Was ist ein Fremdschlüssel?

In einer Datenbank werden die Spalten einer Tabelle als Felder oder Attribute der Tabelle bezeichnet. In der Datenbank einer E-Commerce-Website kann beispielsweise die Mobiltelefonnummer des Benutzers in einer Tabelle mit dem Namen „Benutzer“ (Benutzer) und die Bestellung des Benutzers in einer anderen Tabelle mit dem Namen „Bestellung“ (Bestellmitte) gespeichert werden. Zwischen diesen beiden Tabellen besteht eine Beziehung. Ein Benutzer kann mehrere Bestellungen aufgeben, und eine Bestellung kann nur einem Benutzer gehören.

Fremdschlüssel ist ein relationaler Datenbankbegriff, eine Einschränkung, die zwei Tabellen verbindet. Fremdschlüsseleinschränkungen stellen sicher, dass, wenn eine Tabelle auf Daten in einer anderen Tabelle verweist, ihre Instanz mit einem Wert in der anderen Tabelle übereinstimmen muss.

Der Vorteil von Fremdschlüsseln besteht darin, dass sie die Integrität der Beziehungen zwischen Datentabellen gewährleisten. Dies bedeutet, dass bei einer Fremdschlüsseleinschränkung zwischen zwei Tabellen beim Löschen oder Aktualisieren eines Datensatzes in der Primärtabelle alle davon abhängigen Fremdschlüssel automatisch gelöscht oder aktualisiert werden.

Wie lege ich Fremdschlüssel fest?

Um Fremdschlüssel einzurichten, müssen Sie sicherstellen, dass die von Ihnen verwendete MySQL-Engine dies unterstützt. Derzeit unterstützt MySQL MyISAM-, InnoDB- und NDB-Engines, von denen InnoDB die am weitesten verbreitete Engine und die einzige MySQL-Engine ist, die Fremdschlüssel unterstützt.

Wenn Sie Fremdschlüsseleinschränkungen verwenden möchten, stellen Sie sicher, dass Ihre Tabelle die InnoDB-Engine verwendet. Sie können den folgenden Befehl ausführen, um den Engine-Typ der Tabelle zu überprüfen:

SHOW TABLE STATUS FROM database_name WHERE Name='table_name';

wobei database_name der Datenbankname und table_name der Name der gewünschten Tabelle ist um den Motortyp zu überprüfen. database_name是数据库名称,table_name是您要查看引擎类型的表名。

如果您的表使用的是不支持外键约束的引擎,则需要将其更改为InnoDB引擎,执行以下命令:

ALTER TABLE table_name ENGINE=InnoDB;

接下来,您需要创建一个表并添加一个外键约束。以下是相应的代码示例:

CREATE TABLE order (
    order_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    date_added DATETIME,
    FOREIGN KEY (user_id) REFERENCES user(user_id)
);

在此示例中,我们创建了一个“订单”(order)表,其中包括订单ID(order_id)、用户ID(user_id)和日期(date_added)字段。然后,我们为“订单”表添加了一个外键约束,以确保在添加新订单之前先存在用户ID。

在这个约束表达式中,user_id是当前表中的字段名称,user是所依赖的表的名称,user_id是所依赖表中的字段名称。此外,FOREIGN KEY关键字用于定义外键约束。

在MySQL中,还可以将外键约束定义为CASCADESET NULLRESTRICT。以下是这些选项的说明:

  • CASCADE:在指定父项时,将同时删除或更新子项。
  • SET NULL:在指定父项时将删除或更新子项的值为Null。
  • RESTRICT:在指定父项时阻止删除或更新子项。

以下是完整的代码示例,其中包括CASCADESET NULLRESTRICT选择:

-- 创建父表
CREATE TABLE user (
    user_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(50) NOT NULL
);

-- 创建子表,并定义外键约束
CREATE TABLE order (
    order_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    date_added DATETIME,
    FOREIGN KEY (user_id) REFERENCES user(user_id)
        ON DELETE CASCADE
        ON UPDATE SET NULL
);

在此示例中,我们为“订单”表添加了两个选项。ON DELETE CASCADE选项表示在删除用户记录时,也将删除所有与该用户关联的订单记录。ON UPDATE SET NULL

Wenn Ihre Tabelle eine Engine verwendet, die keine Fremdschlüsseleinschränkungen unterstützt, müssen Sie sie zur InnoDB-Engine ändern und den folgenden Befehl ausführen:

-- 查找所有订单
SELECT * FROM order;

-- 查找用户John的所有订单
SELECT * FROM order WHERE user_id=(SELECT user_id FROM user WHERE username='John');

Als nächstes müssen Sie eine Tabelle erstellen und eine Fremdschlüsseleinschränkung hinzufügen. Hier ist das entsprechende Codebeispiel:

-- 修改订单,将John的所有订单修改为Jane的订单
UPDATE order SET user_id=(SELECT user_id FROM user WHERE username='Jane') WHERE user_id=(SELECT user_id FROM user WHERE username='John');

In diesem Beispiel erstellen wir eine „Bestell“-Tabelle, die die Felder Bestell-ID (order_id), Benutzer-ID (user_id) und Datum (date_added) enthält. Anschließend haben wir der Tabelle „Bestellungen“ eine Fremdschlüsseleinschränkung hinzugefügt, um sicherzustellen, dass die Benutzer-ID vorhanden ist, bevor eine neue Bestellung hinzugefügt wird.

In diesem Einschränkungsausdruck ist user_id der Feldname in der aktuellen Tabelle, user ist der Name der abhängigen Tabelle, user_id ist The Name des Feldes in der abhängigen Tabelle. Darüber hinaus wird das Schlüsselwort FOREIGN KEY verwendet, um Fremdschlüsseleinschränkungen zu definieren.

In MySQL können Fremdschlüsseleinschränkungen auch als CASCADE, SET NULL oder RESTRICT definiert werden. Hier ist eine Beschreibung dieser Optionen:

  • CASCADE: Wenn ein übergeordnetes Element angegeben wird, werden auch die untergeordneten Elemente gelöscht oder aktualisiert.
  • SET NULL: Wenn das übergeordnete Element angegeben wird, wird der Wert des untergeordneten Elements gelöscht oder auf Null aktualisiert.
  • RESTRICT: Verhindert das Löschen oder Aktualisieren von untergeordneten Elementen, wenn ein übergeordnetes Element angegeben wird.
Hier ist das vollständige Codebeispiel, das die Auswahlen CASCADE, SET NULL und RESTRICT enthält:

rrreee

In diesem Beispiel haben wir der Tabelle „Bestellungen“ zwei Optionen hinzugefügt. Die Option ON DELETE CASCADE gibt an, dass beim Löschen eines Benutzerdatensatzes auch alle mit dem Benutzer verknüpften Bestelldatensätze gelöscht werden. Die Option ON UPDATE SET NULL gibt an, dass beim Aktualisieren eines Benutzerdatensatzes die Benutzer-ID im Bestelldatensatz auf einen Nullwert gesetzt wird.

Wie verwende ich Fremdschlüssel? 🎜🎜In der Datenbankprogrammierung können Sie einige grundlegende Befehle verwenden, um Tabellen abzufragen, die Fremdschlüssel enthalten. Hier ist ein Beispielcode: 🎜rrreee🎜 In beiden Beispielen fragen wir die Tabelle „Orders“ ab, die Fremdschlüsseleinschränkungen enthält. Im zweiten Beispiel haben wir auch eine verschachtelte Abfrage verwendet, um Bestelldatensätze für einen bestimmten Benutzer zu exportieren. 🎜🎜Wenn Sie einen Änderungsvorgang durchführen, stellen Sie sicher, dass die Änderung keine Fremdschlüsseleinschränkungen verletzt. Wenn der geänderte Wert die Fremdschlüsseleinschränkungen nicht erfüllt, tritt ein Fehler auf. Ändern Sie in diesem Fall die entsprechenden Daten, um die Fremdschlüsseleinschränkungen zu erfüllen. Hier ist ein Beispiel: 🎜rrreee🎜 In diesem Beispiel ändern wir alle Bestellungen des Benutzers „John“ in Bestellungen des Benutzers „Jane“. Stellen Sie vorher sicher, dass der Benutzer „Jane“ bereits vorhanden ist. 🎜🎜Fazit🎜🎜Die Fremdschlüsseleinschränkungen von MySQL sind sehr wichtig, um die Integrität von Datenbankbeziehungen sicherzustellen. Dieser Artikel enthält Beispiele, die Ihnen beim Erstellen und Verwenden von Fremdschlüsseleinschränkungen helfen. Da Fremdschlüsseleinschränkungen zu den Funktionen der MySQL-Engine gehören, müssen Sie beim Erstellen einer Tabelle die richtige Engine auswählen. Das korrekte Festlegen von Fremdschlüsseleinschränkungen trägt dazu bei, die Stabilität und Wartbarkeit der Datentabelle zu verbessern. 🎜

Das obige ist der detaillierte Inhalt vonMySQL-Fremdschlüsseleinstellungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn