Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Relacionamento de tabelas (chave estrangeira/innoDB)


©JOÃO GABRIEL MARQUES

Pergunta

Olá!

Seguinte: eu tentei criar uma chave estrangeira dentro de uma tabela no MySQL, através do phpMyAdmin, e tá dando o seguinte erro:

#1216 - Cannot add or update a child row: a foreign key constraint fails

Alguém sabe me dizer o que significa esse erro e como eu posso evitá-lo?

Obrigado.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
Olá!

Seguinte: eu tentei criar uma chave estrangeira dentro de uma tabela no MySQL, através do phpMyAdmin, e tá dando o seguinte erro:

#1216 - Cannot add or update a child row: a foreign key constraint fails

Alguém sabe me dizer o que significa esse erro e como eu posso evitá-lo?

Obrigado.

Oi, João!

Você está tentando gravar na tabela filha sem que haja referência na tabela pai.

Grave primeiro na tabela pai depois na tabela filha, e para excluir faça sempre ao contrário.

Link para o comentário
Compartilhar em outros sites

  • 0
Olá!

Seguinte: eu tentei criar uma chave estrangeira dentro de uma tabela no MySQL, através do phpMyAdmin, e tá dando o seguinte erro:

#1216 - Cannot add or update a child row: a foreign key constraint fails

Alguém sabe me dizer o que significa esse erro e como eu posso evitá-lo?

Obrigado.

Oi, João!

Você está tentando gravar na tabela filha sem que haja referência na tabela pai.

Grave primeiro na tabela pai depois na tabela filha, e para excluir faça sempre ao contrário.

Ainda tá dando erro. Vou explicar:

As duas tabelas pertencem a um banco de dados de notícias. A tabela pai é "tbCategorias", responsável por guardar opções de hierarquia para as notícias, como Manchete 1, Manchete 2...ou seja, é por essa tabela que eu vou organizar as notícias nas homes. A tabela filha é "tbNoticias", que guarda as notícias propriamente ditas. Veja abaixo a estrutura das duas tabelas:

==========tbCategorias===========

CREATE TABLE `tbCategorias` (

`idCat` int(5) NOT NULL auto_increment,

`categoria` varchar(30) NOT NULL default '',

PRIMARY KEY (`idCat`),

KEY `categoria` (`categoria`)

) TYPE=InnoDB

===========tbNoticias============

CREATE TABLE `tbNoticias` (

`idNoticia` mediumint(20) NOT NULL auto_increment,

`editoria` varchar(15) NOT NULL default '',

`categoria` varchar(30) NOT NULL default '',

`data` date NOT NULL default '0000-00-00',

`hora` time NOT NULL default '00:00:00',

`autor` varchar(50) NOT NULL default '',

`keyword` varchar(50) NOT NULL default '',

`titulo` varchar(255) NOT NULL default '',

`linhafina` text NOT NULL,

`texto` longtext NOT NULL,

`foto` tinyint(1) NOT NULL default '0',

`publicar` tinyint(1) NOT NULL default '0',

`home` tinyint(1) NOT NULL default '0',

`cliques` int(11) NOT NULL default '0',

PRIMARY KEY (`idNoticia`),

KEY `editoria` (`editoria`),

KEY `categoria` (`categoria`)

) TYPE=InnoDB

A tbCategorias tem um índice no campo "categoria", que é onde tem os nomes das categorias: "man1", "man1_suite", "man2" e assim vai. Essa é a tabela pai.

Na tbNoticias, eu criei um índice no campo "categoria", e esse campo é que deve conter a referência da tbCategorias. Eu também tenho uma tabela chamada "tbEditorias" que guarda as editorias como Brasil, Economia, Internacional etc. O relacionamento da tbEditorias e da tbNoticias deu certo, não deu erro nenhum. Mas já no caso da tbCategorias tá dando erro.

A lógica é a seguinte: -> uma categoria pode ser responsável por várias notícias;

-> uma notícia só pode pertencer a 1 categoria.

O que eu faço? Eu estou perdendo os cabelos da minha cabeça já!!! rsrs

Editado por ©JOÃO GABRIEL MARQUES
Link para o comentário
Compartilhar em outros sites

  • 0
Só estou postando pra dizer que agora funcionou. Eu deletei as tabelas, que já tinham registros, e fiz o dump de novo. Para criar relacionamentos, as tabelas não podem conter nenhum registro? Isso tem alguma coisa a ver?

Sim. provavelmente você tinha alguma chave duplicada(lixo?) na tabela pai e a referência não estava sendo estabelecida.

Link para o comentário
Compartilhar em outros sites

  • 0
Só estou postando pra dizer que agora funcionou. Eu deletei as tabelas, que já tinham registros, e fiz o dump de novo. Para criar relacionamentos, as tabelas não podem conter nenhum registro? Isso tem alguma coisa a ver?

Sim. provavelmente você tinha alguma chave duplicada(lixo?) na tabela pai e a referência não estava sendo estabelecida.

Cada hora é um erro diferente que me aparece...vivendo e aprendendo!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...