Jump to content


Photo

Erro ao deletar FK

Mysql Fk Foreign Key Deletar Erro

  • Faça o login para participar
1 reply to this topic

#1 shogun89

shogun89

    Normal

  • Usuários
  • 91 posts
  • Sexo:Masculino
  • Localidade:marilia

Posted 04/06/2015, 14:07

Tenho uma tabela chamada:

solicitacaoemprestimo codemprestimo, dataemprestimo, horaemprestimo

e outra tabela chamada: emprestados codemprestados, dataemprestimo, horaemprestimo, fk(solicitaremprestimo_codemprestimo)

e usei esse comando:

INSERT INTO emprestados (dataemprestimo, horaemprestimo, solicitacaoemprestimo_codemprestimo) SELECT dataemprestimo, horaemprestimo, codemprestimo FROM solicitacaoemprestimo WHERE codemprestimo = '13';
DELETE FROM solicitacaoemprestimo WHERE codemprestimo = '13';
erro que esta dando: Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (trabalhoclubedodvd.emprestados, CONSTRAINT fk_emprestados_solicitacaoemprestimo1 FOREIGN KEY (solicitacaoemprestimo_codemprestimo)

só que, na hora que eu vou deletar na tabela solicitacaoemprestimo porque meu dvd foi alugado, ele não deixa, mas eu gostaria de deletar porque esse item não será mais usado proque o dvd já foi alugado... Se alguém puder me ajudar desde já eu agradeço...

 


#2 Danilomaru

Danilomaru

    Ativo

  • Moderadores
  • 300 posts
  • Sexo:Masculino
  • Localidade:brasil

Posted 07/06/2015, 19:42

Isso é intencional — a ideia de criar uma chave estrangeira é impedir que uma coluna que faz referência a um ID em outra tabela armazene um valor inválido. Se a consulta que você quer fazer fosse permitida, uma linha teria o valor 13 para a coluna solicitacaoemprestimo_codemprestimo apesar de não existir nenhuma linha em solicitacaoemprestimo com codemprestimo igual a 13.

A motivação de apagar a linha correspondente em solicitacaoemprestimo é que a semântica que você tem em mente pra essa tabela é que ela só vai guardar solicitações ativas? Considere repensar o design do seu banco de dados e deixar todas as solicitações, pra sempre, nessa tabela — se você quiser filtrar só as solicitações que ainda não foram atendidas, você sempre pode fazer

…WHERE codemprestimo NOT IN (SELECT solicitaremprestimo_codemprestimo FROM emprestados)






Veja alguns posts relacionados com: Mysql, Fk, Foreign Key, Deletar, Erro

0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq