sql >> Database >  >> RDS >> Database

Hoe een externe sleutel in SQL toe te voegen?

Hoe een externe sleutel in SQL toe te voegen

Foreign key is een attribuut of een set attributen die verwijst naar de primaire sleutel van dezelfde tabel of een andere tabel (relatie).

  • Aanmaken van buitenlandse sleutels samen met het maken van tabellen

Een externe sleutel kan zelfs worden gemaakt tijdens het maken van tabellen.

Syntaxis:

CREATE TABLE tablename(ColumnName1 Datatype(SIZE) PRIMARY KEY, ColumnNameN Datatype(SIZE), FOREIGN KEY( ColumnName ) REFERENCES PARENT_TABLE_NAME(Primary_Key_ColumnName));

Voorbeeld:

Eerst zullen we een database maken met de naam "employeedb ”. Vervolgens zullen we in die database twee tabellen "medewerker" en "afdeling" maken. We zullen deze tabellen en database in overweging nemen voor alle volgende voorbeelden.

We zullen een primaire sleutel en een externe sleutel maken terwijl we respectievelijk de tabellen 'medewerker' en 'afdeling' maken.

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) 

We hebben twee primaire sleutels "Emp_ID" gemaakt voor een "employee" -tabel, "Dept_ID" naar "afdeling" -tabel en "Emp_ID" als een externe sleutel naar de "afdelings"-tabel tijdens het maken van tabellen. Om te controleren of de sleutels aan tabellen zijn toegevoegd of niet, hebben we het DESC-commando gebruikt.

  • Aanmaken van buitenlandse sleutels met naam van beperking

Een externe sleutel kan zelfs worden gemaakt op het moment dat tabellen worden gemaakt, samen met de naam van de beperking. Deze beperkingsnaam is handig bij het verwijderen van een externe sleutel uit een tabel zonder een hele tabel te verwijderen.

Syntaxis:

CREATE TABLE tablename(ColumnName1 Datatype(SIZE) PRIMARY KEY, ColumnNameN Datatype(SIZE), CONSTRAINT ConstraintName FOREIGN KEY( ColumnName ) REFERENCES PARENT_TABLE_NAME(Primary_Key_ColumnName));

Voorbeeld:

We zullen een primaire sleutel en een externe sleutel maken terwijl we respectievelijk de tabellen "medewerker" en "afdeling" maken. Een buitenlandse sleutel wordt samen met de beperking van de externe sleutel gemaakt tijdens het maken van de tabel zelf.

 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) 

We hebben twee primaire sleutels "Emp_ID" gemaakt voor een "employee" -tabel, "Dept_ID" naar "afdeling" -tabel en "Emp_ID" als een externe sleutel naar de "afdelings"-tabel tijdens het maken van tabellen. Hier hebben we ook een externe sleutelbeperking toegevoegd met de naam "emp_id_fk". Om te controleren of de sleutels aan tabellen zijn toegevoegd of niet, hebben we het DESC-commando gebruikt.

  • Aanmaken van buitenlandse sleutels met het ALTER-commando

Het is mogelijk om een ​​externe sleutel te maken, zelfs nadat de tabel is gemaakt. Als we tijdens het maken van een tabel geen externe sleutel hebben toegevoegd en daarna de externe sleutel aan een bestaande tabel moeten toevoegen, zullen we in dat geval het ALTER-commando gebruiken.

Syntaxis:

ALTER TABLE Parent_TableName ADD FOREIGN KEY(ColumnName) REFERENCES Child_TableName(ColumnName);

Voorbeeld:

We zullen een externe sleutel aan een bestaande tabel toevoegen met behulp van het ALTER-commando.

 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) 

We hebben twee primaire sleutels "Emp_ID" naar een "employee"-tabel en "Dept_ID" naar de "afdeling"-tabel gemaakt tijdens het maken van tabellen. Vervolgens hebben we met het ALTER-commando "Emp_ID" toegevoegd als externe sleutel aan de afdelingstabel. Om te controleren of de sleutels aan tabellen zijn toegevoegd of niet, hebben we het DESC-commando gebruikt.


  1. Maak een gebruiker van stringvariabelen in een PL/SQL-blok

  2. Voeg alle gegevens van een datagridview in één keer in de database in

  3. Percona-distributie voor PostgreSQL implementeren voor hoge beschikbaarheid

  4. CONTROLEER Beperkingen in SQL Server