SQL FOREIGN KEY restrição
Uma chave estrangeira em uma tabela de pontos a uma chave primária em outra tabela.
Vamos ilustrar a chave estrangeira com um exemplo. Olhe para as duas tabelas a seguir:
O "Persons" tabela:
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
O "Orders" tabela:
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
Note que o "P_Id" coluna no "Orders" pontos de tabela para o "P_Id" coluna no "Persons" mesa.
O "P_Id" coluna no "Persons" tabela é a chave primária na "Persons" mesa.
O "P_Id" coluna no "Orders" mesa é uma chave estrangeira na "Orders" mesa.
A restrição FOREIGN KEY é usada para evitar ações que destroem as ligações entre as tabelas.
A restrição FOREIGN KEY também impede que dados inválidos de ser inserido na coluna de chave estrangeira, porque tem de ser um dos valores contidos na tabela ele aponta.
SQL FOREIGN KEY restrição sobre CREATE TABLE
O seguinte SQL cria uma chave estrangeira na "P_Id" coluna quando a "Orders" tabela é criada:
MySQL:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
Para permitir a nomeação de uma restrição de chave estrangeira, e para a definição de uma restrição FOREIGN KEY em várias colunas, use a seguinte sintaxe SQL:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)
SQL FOREIGN KEY restrição sobre ALTER TABLE
Para criar uma restrição FOREIGN KEY na "P_Id" coluna quando a "Orders" tabela já é criado, use o seguinte SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Para permitir a nomeação de uma restrição de chave estrangeira, e para a definição de uma restrição FOREIGN KEY em várias colunas, use a seguinte sintaxe SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
Para excluir uma restrição de chave estrangeira
Para eliminar uma 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