it4life - Portal de Informática

jfrosorio


junkie user
93 posts

Boas!

Normalmente, quando quero criar uma relação entre tabelas, crio uma constraint (ou restrição) com o seguinte comando:

ALTER TABLE [nome_tabela]
ADD CONSTRAINT [nome_constraint] FOREIGN KEY(nome_chave_estrangeira) REFERENCES tabela(nome_chave_primaria)
ON DELETE CASCADE ON UPDATE CASCADE;

A útlima linha de código define o que acontece aos registos da tabela que contêm a chave estrangeira, sempre que é atualizado ou eliminado um registo da tabela referenciada. Neste caso, quando é eliminado um registo na tabela referenciada, são também eliminados todos os registos relacianados na primeira tabela.
Posto isto, a questão é: como definir uma constraint, de forma a que os registos na primeira tabela não sejam eliminados?


A prática vale muito, mas é a vontade de ir mais longe que garante o sucesso.

Bumblebee


junkie user
24 posts

Substituis a última linha por:

ON UPDATE CASCADE ON DELETE SET NULL

Atenção que na tabela referenciada, tens de permitir NULL para o campo em questão!


Muito do que sei, tive de aprender sozinho. Se não fosse desenrascado, bem que estava tramadinho.

Segue-nos nas redes sociais