Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Não consigo setar a foreign key

quando realizo esse comando:

alter table COMPRAS add foreign key (compradores_id) REFERENCES compradores(id);

Aparece a seguinte mensagem:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (controle_compras.#sql-6104_36, CONSTRAINT #sql-6104_36_ibfk_1 FOREIGN KEY (compradores_id) REFERENCES compradores (id))

Não consigo entender qual é o erro.

2 respostas

André,

você adicionou na tabela compras a coluna compradores_id

se não faça :

alter table compras add column compradores_id;

depois disso você pode fazer o comando .

porém pesquisei esse erro e na internet e encontrei isso :

Esse erro ocorre não só na criação da foreign key, mas pode acontecer também quando a foreign key já existir na tabela e você estiver atualizando ou inserindo dados nesta tabela. No caso, esse erro está indicando que constraint foreign key falhou…. Mas como falhou!?!?

Muito simples… a informação do campo da foreign key não é encontrada na tabela2 (a tabela que possui a primary key referenciada). No meu caso, como estou criando as relações em uma base que já existe e já possui informações cadastradas, significa dizer que na tabela1 que eu estou tentando criar a foreign key eu tenho uma ou mais linhas que estão referenciando uma chave primária que não existe na minha ‘tabela2’ (a tabela referenciada).

Se a foreign key já existir e você receber esse erro, significará que você está editando ou inserindo um registro e passando um valor para o campo da foreign key que não possui um registro na tabela2 referenciada (tabela da primary key).

Na minha situação, como minhas tabelas já possuem registros e eu não posso simplesmente limpar a tabela toda, tive que fazer sql’s que deletassem os registros que estão referenciando informações inválidas. Ficou assim mais ou menos:

delete a from tabela1 a left join tabela2 b on b.idTabela2 = a.idTabela2 where b.idTabela2 is null;

Ou seja, faço um select com left join nas minhas duas tabelas e deleto as linhas que vierem com as informações da tabela2 nulas.

https://oliveirasdev.wordpress.com/2011/02/18/erros-na-criacao-de-foreign-keys-no-mysql/

Espero ter ajudado .

solução!

boa noite André!!!

Além da possibilidade citada pelo Celso, existe também a possibilidade de você estar utilizando o comando errado. Ao adicionar o campo na tabela compras, acredito que você a tenha adicionado com o nome de comprador_id, se este for o caso, ao tentar inserir a foreign key como compradores_id, o sgbd não encontra-rá este campo resultando no erro. Desta forma, tente o seguinte comando:

alter table COMPRAS add foreign key (comprador_id) REFERENCES compradores(id);