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.