Restrição de chave estrangeira do MySQL
Restrição de chave estrangeira do MySQL
A FOREIGN KEY
restrição é usada para evitar ações que destruam links entre tabelas.
A FOREIGN KEY
é um campo (ou coleção de campos) em uma tabela, que se refere a PRIMARY KEY
em outra tabela.
A tabela com a chave estrangeira é chamada de tabela filha e a tabela com a chave primária é chamada de tabela referenciada ou pai.
Observe as duas tabelas a seguir:
Tabela de pessoas
PersonID | LastName | FirstName | Age |
---|---|---|---|
1 | Hansen | Ola | 30 |
2 | Svendson | Tove | 23 |
3 | Pettersen | Kari | 20 |
Tabela de pedidos
OrderID | OrderNumber | PersonID |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
Observe que a coluna "PersonID" na tabela "Pedidos" aponta para a coluna "PersonID" na tabela "Pessoas".
A coluna "PersonID" na tabela "Persons" está PRIMARY KEY
na tabela "Persons".
A coluna "PersonID" na tabela "Pedidos" está
FOREIGN KEY
na tabela "Pedidos".
A FOREIGN KEY
restrição impede que dados inválidos sejam inseridos na coluna de chave estrangeira, pois deve ser um dos valores contidos na tabela pai.
CHAVE ESTRANGEIRA em CREATE TABLE
O SQL a seguir cria um FOREIGN KEY
na coluna "PersonID" quando a tabela "Orders" é criada:
CREATE TABLE Orders
(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
Para permitir a nomeação de uma FOREIGN KEY
restrição e para definir uma
FOREIGN KEY
restrição em várias colunas, use a seguinte sintaxe SQL:
CREATE TABLE Orders
(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
CHAVE ESTRANGEIRA em ALTER TABLE
Para criar uma FOREIGN KEY
restrição na coluna "PersonID" quando a tabela "Orders" já estiver criada, use o seguinte SQL:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
Para permitir a nomeação de uma FOREIGN KEY
restrição e para definir uma
FOREIGN KEY
restrição em várias colunas, use a seguinte sintaxe SQL:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
SOLTE uma restrição de chave estrangeira
Para eliminar uma FOREIGN KEY
restrição, use o seguinte SQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;