So fügen Sie Fremdschlüssel in SQL hinzu
Fremdschlüssel ist ein Attribut oder eine Gruppe von Attributen, die auf den Primärschlüssel derselben Tabelle oder einer anderen Tabelle (Beziehung) verweist.
- Fremdschlüsselerstellung zusammen mit Tabellenerstellung
Ein Fremdschlüssel kann sogar beim Erstellen von Tabellen erstellt werden.
Syntax:
CREATE TABLE tablename(ColumnName1 Datatype(SIZE) PRIMARY KEY, ColumnNameN Datatype(SIZE), FOREIGN KEY( ColumnName ) REFERENCES PARENT_TABLE_NAME(Primary_Key_ColumnName));
Beispiel:
Zuerst erstellen wir eine Datenbank mit dem Namen „employeedb “. Dann erstellen wir in dieser Datenbank zwei Tabellen „Mitarbeiter“ und „Abteilung“. Wir werden diese Tabellen und Datenbanken für alle nachfolgenden Beispiele berücksichtigen.
Wir werden einen Primärschlüssel und einen Fremdschlüssel erstellen, während wir die Tabellen „Mitarbeiter“ bzw. „Abteilung“ erstellen.
mysql> USE employeedb; Database changed mysql> CREATE TABLE employee(Emp_ID INT NOT NULL PRIMARY KEY, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40)); Query OK, 0 rows affected (0.07 sec) mysql> DESC employee; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | Emp_ID | int(11) | NO | PRI | NULL | | | Emp_Name | varchar(40) | YES | | NULL | | | Emp_Salary | varchar(40) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 3 rows in set (0.09 sec) mysql> CREATE TABLE department(Dept_ID INT NOT NULL PRIMARY KEY, Dept_Name VARCHAR(40), Emp_ID INT NOT NULL, FOREIGN KEY(Emp_ID) REFERENCES employee(Emp_ID)); Query OK, 0 rows affected (0.20 sec) mysql> DESC department; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | Dept_ID | int(11) | NO | PRI | NULL | | | Dept_Name | varchar(40) | YES | | NULL | | | Emp_ID | int(11) | NO | MUL | NULL | | +-----------+-------------+------+-----+---------+-------+ 3 rows in set (0.02 sec)
Wir haben beim Erstellen von Tabellen zwei Primärschlüssel „Emp_ID“ für eine „Employee“-Tabelle, „Dept_ID“ für eine „Department“-Tabelle und „Emp_ID“ als Fremdschlüssel für eine „Department“-Tabelle erstellt. Um zu überprüfen, ob die Schlüssel zu Tabellen hinzugefügt werden oder nicht, haben wir den DESC-Befehl verwendet.
- Fremdschlüsselerstellung mit Beschränkungsname
Ein Fremdschlüssel kann sogar beim Erstellen von Tabellen zusammen mit dem Einschränkungsnamen erstellt werden. Dieser Einschränkungsname ist nützlich, wenn Sie einen Fremdschlüssel aus einer Tabelle löschen, ohne eine ganze Tabelle zu löschen.
Syntax:
CREATE TABLE tablename(ColumnName1 Datatype(SIZE) PRIMARY KEY, ColumnNameN Datatype(SIZE), CONSTRAINT ConstraintName FOREIGN KEY( ColumnName ) REFERENCES PARENT_TABLE_NAME(Primary_Key_ColumnName));
Beispiel:
Wir werden einen Primärschlüssel und einen Fremdschlüssel erstellen, während wir die Tabellen „Mitarbeiter“ bzw. „Abteilung“ erstellen. Der Fremdschlüssel wird zusammen mit der Fremdschlüsseleinschränkung erstellt, während die Tabelle selbst erstellt wird.
mysql> USE employeedb; Database changed mysql> CREATE TABLE employee(Emp_ID INT NOT NULL PRIMARY KEY, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40)); Query OK, 0 rows affected (0.11 sec) mysql> DESC employee; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | Emp_ID | int(11) | NO | PRI | NULL | | | Emp_Name | varchar(40) | YES | | NULL | | | Emp_Salary | varchar(40) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 3 rows in set (0.01 sec) mysql> CREATE TABLE department(Dept_ID INT NOT NULL PRIMARY KEY, Dept_Name VARCHAR(40), Emp_ID INT NOT NULL, CONSTRAINT emp_id_fk FOREIGN KEY(Emp_ID) REFERENCES employee(Emp_ID)); Query OK, 0 rows affected (0.25 sec) mysql> DESC department; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | Dept_ID | int(11) | NO | PRI | NULL | | | Dept_Name | varchar(40) | YES | | NULL | | | Emp_ID | int(11) | NO | MUL | NULL | | +-----------+-------------+------+-----+---------+-------+ 3 rows in set (0.04 sec)
Wir haben beim Erstellen von Tabellen zwei Primärschlüssel „Emp_ID“ für eine „Employee“-Tabelle, „Dept_ID“ für eine „Department“-Tabelle und „Emp_ID“ als Fremdschlüssel für eine „Department“-Tabelle erstellt. Hier haben wir auch eine Fremdschlüsselbeschränkung mit dem Namen „emp_id_fk“ hinzugefügt. Um zu überprüfen, ob die Schlüssel zu Tabellen hinzugefügt werden oder nicht, haben wir den DESC-Befehl verwendet.
- Fremdschlüsselerstellung mit ALTER-Befehl
Es ist möglich, einen Fremdschlüssel auch nach der Tabellenerstellung zu erstellen. Wenn wir beim Erstellen einer Tabelle keinen Fremdschlüssel hinzugefügt haben und danach den Fremdschlüssel zu einer vorhandenen Tabelle hinzufügen müssen, verwenden wir in diesem Fall den ALTER-Befehl.
Syntax:
ALTER TABLE Parent_TableName ADD FOREIGN KEY(ColumnName) REFERENCES Child_TableName(ColumnName);
Beispiel:
Wir werden mit dem ALTER-Befehl einen Fremdschlüssel zu einer bestehenden Tabelle hinzufügen.
mysql> USE employeedb; Database changed mysql> CREATE TABLE employee(Emp_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40)); Query OK, 0 rows affected (0.16 sec) mysql> DESC employee; +------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+----------------+ | Emp_ID | int(11) | NO | PRI | NULL | auto_increment | | Emp_Name | varchar(40) | YES | | NULL | | | Emp_Salary | varchar(40) | YES | | NULL | | +------------+-------------+------+-----+---------+----------------+ 3 rows in set (0.01 sec) mysql> CREATE TABLE department(Dept_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Dept_Name VARCHAR(40), Emp_ID INT NOT NULL); Query OK, 0 rows affected (0.12 sec) mysql> ALTER TABLE department ADD FOREIGN KEY(Emp_ID) REFERENCES employee(Emp_ID); Query OK, 0 rows affected (0.23 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC department; +-----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+----------------+ | Dept_ID | int(11) | NO | PRI | NULL | auto_increment | | Dept_Name | varchar(40) | YES | | NULL | | | Emp_ID | int(11) | NO | MUL | NULL | | +-----------+-------------+------+-----+---------+----------------+ 3 rows in set (0.01 sec)
Wir haben beim Erstellen von Tabellen zwei Primärschlüssel „Emp_ID“ für eine „Employee“-Tabelle und „Dept_ID“ für eine „Department“-Tabelle erstellt. Dann haben wir mit dem ALTER-Befehl „Emp_ID“ als Fremdschlüssel zur Abteilungstabelle hinzugefügt. Um zu überprüfen, ob die Schlüssel zu Tabellen hinzugefügt werden oder nicht, haben wir den DESC-Befehl verwendet.