Restrição FOREIGN KEY SQL

Restrição FOREIGN KEY SQL

Uma FOREIGN KEY em uma tabela aponta para a PRIMARY KEY em outra tabela.

Vamos explicar o conceito de FOREIGN KEY com um exemplo. Veja as duas tabelas a seguir:

Tabela "Persons":

Id_P NomeUltimo NomePrimeiro Endereço Cidade
1 Adams John Rua Oxford Londres
2 Bush George Avenida Fifth Nova York
3 Carter Thomas Rua Chang'an Pequim

Tabela "Orders":

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1

Atenção, a coluna "Id_P" na tabela "Orders" aponta para a coluna "Id_P" na tabela "Persons".

A coluna "Id_P" na tabela "Persons" é a PRIMARY KEY na tabela "Persons".

A coluna "Id_P" na tabela "Orders" é uma FOREIGN KEY na tabela "Orders".

A restrição FOREIGN KEY é usada para prevenir ações que destruam as conexões entre as tabelas.

A restrição FOREIGN KEY também pode evitar a inserção de dados ilegais na coluna de chave estrangeira, pois deve ser um dos valores da tabela a que aponta.

Restrição FOREIGN KEY no CREATE TABLE

Abaixo está o SQL criado durante a criação da tabela "Orders" para criar FOREIGN KEY na coluna "Id_P":

MySQL:

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)

SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)

Se precisar de nomear a restrição FOREIGN KEY e definir restrições FOREIGN KEY para várias colunas, use a seguinte sintaxe SQL:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)

Restrição FOREIGN KEY do SQL em ALTER TABLE

Se precisar criar uma restrição FOREIGN KEY para a coluna "Id_P" enquanto a tabela "Orders" já existe, use o seguinte SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)

Se precisar de nomear a restrição FOREIGN KEY e definir restrições FOREIGN KEY para várias colunas, use a seguinte sintaxe SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)

Revogar restrição FOREIGN KEY

Se precisar de revogar a restrição FOREIGN KEY, use o seguinte SQL:

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders