5
respostas

Erro MySQL - Cannot add or update a child row: a foreign key constraint fails

Olá, incluí a instrução ALTER TABLE COMPRAS ADD FOREIGN KEY (COMPRADOR_ID) REFERENCES COMPRADORES(ID) e retornou o erro Cannot add or update a child row: a foreign key constraint fails. A versão do meu mysql é 5.7.

https://cursos.alura.com.br/course/introducao-a-banco-de-dados-e-sql/task/5693

5 respostas

Olá Vanessa,

provavelmente ele está tendo problemas para encontrar a chave primária ID na tabela de COMPRADORES. Preciso ver como que estas tabelas estão salvas no seu banco.

Execute o comando desc COMPRAS e desc COMPRADORES que eles vão te mostrar uma descrição das duas tabelas criadas no seu banco mysql. Ai me manda o retorno desses comandos para eu dar uma olhada como que elas estão e o que causou o erro.

Tive o mesmo problema. Segue abaixo a descrição dos referidos campos nas tabelas.

desc compradores;

Field Type Null Key Default Extra id int (11) NO PRI NULL auto_increment

desc compras;

Field Type Null Key Default Extra id int (11) NO PRI NULL auto_increment

Olá Diogo,

estas foram as únicas coisas que vieram no seu desc de compras retornou? Porque antes de dar o alter table de adicionar a foreign key, você precisa criar a coluna de comprador_id na tabela de compras.

ALTER TABLE COMPRAS ADD COLUMN COMPRADOR_ID INT NOT NULL

Essa foi a tabela que retornou ao executar o comando "desc compras;"

Field | Type | Null | Key | Default | Extra | +--------------+------------------------------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | valor | double | YES | | NULL | | | data | date | YES | | NULL | | | recebido | tinyint(1) | YES | | 0 | | | observacoes | varchar(255) | NO | | NULL | | | descricao | varchar(255) | YES | | NULL | | | forma_pagt | enum('Cartao','Boleto','Dinheiro') | YES | | NULL | | | comprador_id | int(11) | NO | | NULL | |

Bom dia,

Deixo a mesma resposta que coloquei no post do Diogo:

Assumindo que já foi criado a coluna comprador_id em Compras, façam um select * from compras e vejam os valores da coluna comprador_id.

Para que você possa definir esta coluna como chave estrangeira de outra tabela, como já existem dados populando a table Compras, você tem que garantir que todos registros de Compras tem um valor na coluna comprador_id que existe na tabela Compradores.id.

Ou seja, faça updates na tabela Compras para definir que a coluna comprador_id seja = 1 por exemplo, desde que na tabela Compradores exista um registro onde a coluna id é 1.

Ficou claro? Após garantir que não sobrou registro nenhum na tabela Compras cujo valor da coluna comprador_id é nulo ou aponta para um valor inexistente da coluna id de Compradores, pode rodar este comando de Foreign Key que dará certo. Qualquer coisa estamos ai.

Abraços.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software