Database
 sql >> Baza danych >  >> RDS >> Database

Jak dodać klucz obcy w SQL?

Jak dodać klucz obcy w SQL

Klucz obcy to atrybut lub zestaw atrybutów, który odwołuje się do klucza podstawowego tej samej tabeli lub innej tabeli (relacja).

  • Tworzenie klucza obcego wraz z tworzeniem tabeli

Klucz obcy można utworzyć nawet w momencie tworzenia tabel.

Składnia:

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

Przykład:

Najpierw utworzymy bazę danych o nazwie „pracownik ”. Następnie w tej bazie stworzymy dwie tabele „pracownik” i „dział”. Rozważymy te tabele i bazę danych we wszystkich kolejnych przykładach.

Stworzymy klucz podstawowy i klucz obcy podczas tworzenia odpowiednio tabel „pracownik” i „dział”.

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) 

Podczas tworzenia tabel stworzyliśmy dwa klucze podstawowe „Emp_ID” do tabeli „pracownik”, „Dept_ID” do tabeli „departament” oraz „Emp_ID” jako klucz obcy do tabeli „departament”. Aby sprawdzić, czy klucze zostały dodane do tabel, czy nie, użyliśmy polecenia DESC.

  • Tworzenie klucza obcego z nazwą ograniczenia

Klucz obcy można utworzyć nawet w momencie tworzenia tabel wraz z nazwą ograniczenia. Ta nazwa ograniczenia będzie przydatna podczas usuwania klucza obcego z tabeli bez usuwania całej tabeli.

Składnia:

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

Przykład:

Stworzymy klucz podstawowy i klucz obcy tworząc odpowiednio tabele „pracownik” i „dział”. Klucz obcy zostanie utworzony wraz z ograniczeniem klucza obcego podczas tworzenia samej tabeli.

 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) 

Podczas tworzenia tabel stworzyliśmy dwa klucze podstawowe „Emp_ID” do tabeli „pracownik”, „Dept_ID” do tabeli „departament” oraz „Emp_ID” jako klucz obcy do tabeli „departament”. Tutaj dodaliśmy również ograniczenie klucza obcego o nazwie „emp_id_fk”. Aby sprawdzić, czy klucze zostały dodane do tabel, czy nie, użyliśmy polecenia DESC.

  • Tworzenie klucza obcego za pomocą polecenia ALTER

Możliwe jest utworzenie klucza obcego nawet po utworzeniu tabeli. Podczas tworzenia tabeli, jeśli nie dodaliśmy do niej klucza obcego, a następnie musimy dodać klucz obcy do istniejącej tabeli, wówczas użyjemy polecenia ALTER.

Składnia:

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

Przykład:

Dodamy klucz obcy do istniejącej tabeli za pomocą polecenia ALTER.

 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) 

Podczas tworzenia tabel utworzyliśmy dwa klucze podstawowe „Emp_ID” do tabeli „pracownik” oraz „Dept_ID” do tabeli „departament”. Następnie za pomocą polecenia ALTER dodaliśmy „Emp_ID” jako klucz obcy do tabeli działów. Aby sprawdzić, czy klucze zostały dodane do tabel, czy nie, użyliśmy polecenia DESC.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znaczenie linii bazowych

  2. Zabawa z kompresją (kolumnową) na bardzo dużym stole – część 3

  3. Cele wierszy, część 4:Wzorzec przeciwdziałania sprzężeniu

  4. Tworzenie planów utrzymania bazy danych

  5. Porównanie warstw abstrakcji bazy danych PHP i wtyczek CRUD