Dúvida de implementação SQL - Foreign Keys e Constraints
4 respostasResolvido
bancomysqlsql
Harmendani
Pessoal, na criação ou alteração de tabelas utilizando o Mysql vejo que é possível adicionar uma chave estrangeira das seguintes maneiras no comando ALTER ou no CREATE (No exemplo, utilizo com o ALTER):
1º Maneira:
A diferença é que pela segunda maneira o banco vai atribuir à foreign key um nome interno, usando as convenções dele.
Experimente montar esse relacionamento usando as duas formas e tente inserir um registro que estoure a FK (ou seja, passando um n_numeprodu que não exista na tabela comprodu). Você vai perceber a diferença pelas mensagens de erro que o banco te retornar.
Solucao aceita
Jonathan_Medeiros
No seu primeiro exemplo como você informou um nome para a FK -> fk_comivenda_comprodu, quando ocorrer qualquer erro em relação a essa restrição o MySQL irá lhe mostrar o erro indicando o nome que você criou.
Já no segundo exemplo como você não informou nome o MySQL criará um nome automaticamente para esta constraint.
Tá, mas porque devo criar um nome para uma constraint se o MySQL faz isso sozinho ?
Imagine você dentro de uma aplicação procurando por um erro no banco informando o nome da restrição que você criou, por exemplo: Message: SQLSTATE[23000]: Integrity constraint violation: fk_comivenda_comprodu
Fica fácil entender entender não é ?
Agora imagine se você deixar ele criar o nome da restrição automaticamente: