Database
 sql >> Base de Dados >  >> RDS >> Database

Como adicionar chave estrangeira no SQL?


Como adicionar chave estrangeira no SQL

Chave estrangeira é um atributo ou conjunto de atributos que faz referência à chave primária da mesma tabela ou de outra tabela (relação).
  • Criação de chave estrangeira junto com a criação de tabela

Uma chave estrangeira pode ser criada mesmo no momento da criação de tabelas.

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

Exemplo:

Primeiramente, criaremos um banco de dados com o nome “employeedb ”. Então nesse banco de dados vamos criar duas tabelas “employee” e “department”. Consideraremos essas tabelas e banco de dados para todos os exemplos subsequentes.

Criaremos uma chave primária e uma chave estrangeira enquanto criamos as tabelas “employee” e “department”, respectivamente.
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) 

Criamos duas chaves primárias “Emp_ID” para uma tabela “employee”, “Dept_ID” para a tabela “department” e “Emp_ID” como uma chave estrangeira para a tabela “department” durante a criação de tabelas. Para verificar se as chaves são adicionadas às tabelas ou não, usamos o comando DESC.
  • Criação de chave estrangeira com nome de restrição

Uma chave estrangeira pode ser criada mesmo no momento da criação de tabelas junto com o nome da restrição. Esse nome de restrição será útil ao descartar uma chave estrangeira de uma tabela sem descartar uma tabela inteira.

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

Exemplo:

Criaremos uma chave primária e uma chave estrangeira enquanto criamos as tabelas “employee” e “department”, respectivamente. A chave estrangeira será criada junto com a restrição de chave estrangeira durante a criação da própria tabela.
 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) 

Criamos duas chaves primárias “Emp_ID” para uma tabela “employee”, “Dept_ID” para a tabela “department” e “Emp_ID” como uma chave estrangeira para a tabela “department” durante a criação de tabelas. Aqui, também adicionamos uma restrição de chave estrangeira chamada “emp_id_fk”. Para verificar se as chaves são adicionadas às tabelas ou não, usamos o comando DESC.
  • Criação de chave estrangeira usando o comando ALTER

É possível criar uma chave estrangeira mesmo após a criação da tabela. Ao criar uma tabela, se não adicionamos uma chave estrangeira a ela e depois precisamos adicionar a chave estrangeira a uma tabela existente, usaremos o comando ALTER nesse caso.

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

Exemplo:

Adicionaremos uma chave estrangeira a uma tabela existente usando o comando 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) 

Criamos duas chaves primárias “Emp_ID” para uma tabela “employee” e “Dept_ID” para a tabela “department” durante a criação de tabelas. Em seguida, usando o comando ALTER, adicionamos “Emp_ID” como chave estrangeira à tabela de departamentos. Para verificar se as chaves são adicionadas às tabelas ou não, usamos o comando DESC.