Heim >Datenbank >MySQL-Tutorial >So fügen Sie Fremdschlüssel in MySQL hinzu
So fügen Sie Fremdschlüssel in MySQL hinzu: 1. Fügen Sie in der CREATE TABLE-Anweisung Fremdschlüssel über das Schlüsselwort FOREIGN KEY hinzu. 2. Fügen Sie in der ALTER TABLE-Anweisung Fremdschlüssel über die Schlüsselwörter ADD und FOREIGN KEY hinzu.
Empfohlener Kurs: MySQL-Tutorial.
MySQL-Fremdschlüsseleinschränkung (FOREIGN KEY) ist ein spezielles Feld der Tabelle, das häufig zusammen mit Primärschlüsseleinschränkungen verwendet wird. Bei zwei Tabellen mit einer zugehörigen Beziehung ist die Tabelle, in der sich der Primärschlüssel im zugehörigen Feld befindet, die Primärtabelle (übergeordnete Tabelle) und die Tabelle, in der sich der Fremdschlüssel befindet, die sekundäre Tabelle (untergeordnete Tabelle).
Fremdschlüssel werden verwendet, um die Beziehung zwischen der Master-Tabelle und der Slave-Tabelle herzustellen, eine Verbindung für die Daten in den beiden Tabellen herzustellen und die Konsistenz und Integrität der Daten in den beiden Tabellen einzuschränken. An einem Obststand gibt es beispielsweise nur vier Obstsorten: Äpfel, Pfirsiche, Pflaumen und Wassermelonen. Wenn Sie dann zum Obststand kommen, können Sie nur Äpfel, Pfirsiche, Pflaumen und Wassermelonen auswählen sind nicht käuflich zu erwerben.
Wenn ein Datensatz aus der Haupttabelle gelöscht wird, muss auch der entsprechende Datensatz aus der Tabelle entsprechend geändert werden. Eine Tabelle kann einen oder mehrere Fremdschlüssel haben, und der Fremdschlüssel kann null sein. Wenn er nicht null ist, muss der Wert jedes Fremdschlüssels einem bestimmten Wert des Primärschlüssels in der Haupttabelle entsprechen.
Bei der Definition von Fremdschlüsseln müssen Sie folgende Regeln beachten:
Die Haupttabelle muss bereits in der Datenbank vorhanden sein bzw. vorhanden sein die Tabelle, die gerade erstellt wird. Im letzteren Fall handelt es sich bei der Master-Tabelle und der Slave-Tabelle um dieselbe Tabelle. Eine solche Tabelle wird als selbstreferenzielle Tabelle bezeichnet, und diese Struktur wird als selbstreferenzielle Integrität bezeichnet.
Muss einen Primärschlüssel für die Haupttabelle definieren.
Primärschlüssel dürfen keine Nullwerte enthalten, in Fremdschlüsseln sind jedoch Nullwerte zulässig. Das heißt, solange jeder Nicht-Null-Wert des Fremdschlüssels im angegebenen Primärschlüssel vorkommt, ist der Inhalt des Fremdschlüssels korrekt.
Geben Sie den Spaltennamen oder eine Kombination von Spaltennamen nach dem Tabellennamen der Haupttabelle an. Diese Spalte oder Spaltenkombination muss der Primärschlüssel oder Kandidatenschlüssel der Haupttabelle sein.
Die Anzahl der Spalten im Fremdschlüssel muss mit der Anzahl der Spalten im Primärschlüssel der Haupttabelle übereinstimmen.
Der Datentyp der Spalte im Fremdschlüssel muss mit dem Datentyp der entsprechenden Spalte im Primärschlüssel der Haupttabelle übereinstimmen.
Fremdschlüsseleinschränkungen beim Erstellen der Tabelle festlegen
Verwenden Sie in der CREATE TABLE-Anweisung das FOREIGN KEY-Schlüsselwort Specify Das spezifische Syntaxformat lautet wie folgt:
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES <主表名> 主键列1 [,主键列2,…]
Beispiel 1
Um die Fremdschlüsselbeziehung zwischen Tabellen zu zeigen, wird dieses Beispiel im erstellt test_db-Datenbank Eine Abteilungstabelle tb_dept1, die Tabellenstruktur ist in der folgenden Tabelle dargestellt.
Die SQL-Anweisung und die laufenden Ergebnisse der Erstellung von tb_dept1 lauten wie folgt.
mysql> CREATE TABLE tb_dept1 -> ( -> id INT(11) PRIMARY KEY, -> name VARCHAR(22) NOT NULL, -> location VARCHAR(50) -> ); Query OK, 0 rows affected (0.37 sec)
Erstellen Sie die Datentabelle tb_emp6 und erstellen Sie eine Fremdschlüsseleinschränkung für die Tabelle tb_emp6, sodass ihre Schlüssel-Abteilungs-ID der Primärschlüssel-ID der Tabelle tb_dept1 als Fremdschlüssel zugeordnet ist und ausgeführt wird Die Ergebnisse sind wie folgt.
mysql> CREATE TABLE tb_emp6 -> ( -> id INT(11) PRIMARY KEY, -> name VARCHAR(25), -> deptId INT(11), -> salary FLOAT, -> CONSTRAINT fk_emp_dept1 -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id) -> ); Query OK, 0 rows affected (0.37 sec) mysql> DESC tb_emp6; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(25) | YES | | NULL | | | deptId | int(11) | YES | MUL | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 4 rows in set (1.33 sec)
Nachdem die obige Anweisung erfolgreich ausgeführt wurde, wird eine Fremdschlüsseleinschränkung mit dem Namen fk_emp_dept1 zur Tabelle tb_emp6 hinzugefügt. Der Fremdschlüsselname ist deptId, der von der Primärschlüssel-ID der Tabelle tb_dept1 abhängt.
Hinweis: Der Fremdschlüssel der Sekundärtabelle muss mit dem Primärschlüssel der Primärtabelle verknüpft sein und die Datentypen des Primärschlüssels und des Fremdschlüssels müssen konsistent sein. Beispielsweise sind beide vom Typ INT oder beide vom Typ CHAR. Wenn diese Anforderungen nicht erfüllt sind, tritt beim Erstellen der Slave-Tabelle der Fehler „ERROR 1005 (HY000): Tabelle kann nicht erstellt werden“ auf.
Fremdschlüsseleinschränkungen hinzufügen, wenn die Tabelle geändert wird
Fremdschlüsseleinschränkungen können auch hinzugefügt werden, wenn die Tabelle geändert wird, jedoch Fremdschlüsseleinschränkungen hinzugefügt werden Schlüssel Die Prämisse der Einschränkung lautet: Die Daten in der Fremdschlüsselspalte der Sekundärtabelle müssen mit den Daten in der Primärschlüsselspalte der Primärtabelle übereinstimmen, sonst sind keine Daten vorhanden.
Das Syntaxformat zum Hinzufügen von Fremdschlüsseleinschränkungen beim Ändern der Datentabelle lautet wie folgt:
ALTER TABLE <数据表名> ADD CONSTRAINT <外键名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
Beispiel 2
Ändern Sie die Datentabelle tb_emp2 und legen Sie das Feld deptId als fest Fremdschlüssel und Übereinstimmung mit der Primärschlüssel-ID der Tabelle tb_dept1. Die SQL-Anweisung und die laufenden Ergebnisse lauten wie folgt.
mysql> ALTER TABLE tb_emp2 -> ADD CONSTRAINT fk_tb_dept1 -> FOREIGN KEY(deptId) -> REFERENCES tb_dept1(id); Query OK, 0 rows affected (1.38 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SHOW CREATE TABLE tb_emp2\G *************************** 1. row *************************** Table: tb_emp2 Create Table: CREATE TABLE `tb_emp2` ( `id` int(11) NOT NULL, `name` varchar(30) DEFAULT NULL, `deptId` int(11) DEFAULT NULL, `salary` float DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_tb_dept1` (`deptId`), CONSTRAINT `fk_tb_dept1` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 1 row in set (0.12 sec)
Hinweis: Stellen Sie beim Hinzufügen von Fremdschlüsseleinschränkungen zur erstellten Datentabelle sicher, dass die Werte der Spalten, zu denen die Fremdschlüsseleinschränkungen hinzugefügt werden, alle aus den Primärschlüsselspalten und dem Fremdschlüssel stammen Spalten dürfen nicht leer sein.
Fremdschlüsseleinschränkungen löschen
Wenn eine Fremdschlüsseleinschränkung in einer Tabelle nicht mehr benötigt wird, muss sie aus der Tabelle gelöscht werden. Sobald der Fremdschlüssel gelöscht wird, wird die Zuordnung zwischen der Master-Tabelle und der Slave-Tabelle freigegeben.
Das Syntaxformat zum Löschen von Fremdschlüsseleinschränkungen lautet wie folgt:
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
Beispiel 3
Löschen Sie die Fremdschlüsseleinschränkung fk_tb_dept1 in der Datentabelle tb_emp2 , SQL Die Anweisungen und Ausführungsergebnisse werden unten angezeigt.
mysql> ALTER TABLE tb_emp2 -> DROP FOREIGN KEY fk_tb_dept1; Query OK, 0 rows affected (0.19 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> SHOW CREATE TABLE tb_emp2\G *************************** 1. row *************************** Table: tb_emp2 Create Table: CREATE TABLE `tb_emp2` ( `id` int(11) NOT NULL, `name` varchar(30) DEFAULT NULL, `deptId` int(11) DEFAULT NULL, `salary` float DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_tb_dept1` (`deptId`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 1 row in set (0.00 sec)
Sie können sehen, dass FOREIGN KEY nicht mehr in tb_emp2 vorhanden ist und die ursprüngliche Fremdschlüsseleinschränkung namens fk_emp_dept erfolgreich gelöscht wurde.
Das obige ist der detaillierte Inhalt vonSo fügen Sie Fremdschlüssel in MySQL hinzu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!