MYSQL Cannot add or update a child row: a foreign key constraint fails

4 respostas
R

Gente boa tarde ta dando esse erro no mysql, alguém sabe como eu posso arrumar isso?

Cannot add or update a child row: a foreign key constraint fails (projetolivraria.compras, CONSTRAINT FK_COMPRASCLIENTES_ID FOREIGN KEY (id_clientes) REFERENCES clientes (id))

create table projetolivraria.clientes (
  id BIGINT NOT NULL AUTO_INCREMENT,
  nome VARCHAR(255),
  cpf VARCHAR(255),
  produto VARCHAR(255),
  email VARCHAR(255),
  primary key (id));
create table projetolivraria.livros (
  id BIGINT NOT NULL AUTO_INCREMENT,
  nome VARCHAR(255),
  valor DOUBLE,
  tipo VARCHAR(255),
  primary key (id));
create table projetolivraria.compras (
    id BIGINT NOT NULL AUTO_INCREMENT,
    id_livros BIGINT,
    id_clientes BIGINT,
    dtini VARCHAR(255),
	dtfim VARCHAR(255),
    observacao VARCHAR(255),
    primary key (id));
ALTER TABLE projetolivraria.compras ADD CONSTRAINT FK_COMPRASCLIENTES_ID FOREIGN KEY (id_clientes) REFERENCES projetolivraria.clientes (ID);

ALTER TABLE projetolivraria.compras ADD CONSTRAINT FK_COMPRASLIVROS_ID FOREIGN KEY (id_livros) REFERENCES projetolivraria.livros (ID);
INSERT INTO `projetolivraria`.`compras` (`id`, `id_livros`, `id_clientes`, `observacao`) VALUES ('1', '1', '1', 'TESTE MARCOS');
INSERT INTO `projetolivraria`.`compras` (`id`, `id_livros`, `id_clientes`, `observacao`) VALUES ('2', '2', '2', 'TESTE RAFAEL');
digite ou cole o código aqui

4 Respostas

Jonathan_Medeiros

Você não pode fazer um insert na tabela compras referenciando IDs de livro e cliente inexistente nas tabelas de livro e cliente!

Primeiro faça 2 inserts na tebela clientes, depois 2 inserts na tabela livros e por último execute os 2 inserts que você fez para a tabela de compras.

R

Jonathan então eu ja tinha esses inserts e mesmo ta dando erro

INSERT INTO `projetolivraria`.`livros` (`id`,`nome`, `valor`, `tipo`) VALUES ('1', 'HARRY POTTER', 40, 'FANTASIA');
INSERT INTO `projetolivraria`.`livros` (`id`,`nome`, `valor`, `tipo`) VALUES ('2', 'NARUTO', 20, 'AVENTURA');
INSERT INTO `projetolivraria`.`clientes` (`id`,`nome`, `cpf`, `produto`, `email`) VALUES ('1', 'Rafael Oliveira', '123456789', 'Livros', '[email removido]');
INSERT INTO `projetolivraria`.`clientes` (`id`,`nome`, `cpf`, `produto`, `email`) VALUES ('2', 'Mark Arthur', '321456789', 'OutrosProdutos', '[email removido]');
Jonathan_Medeiros

Se você tem certeza que os registros realmente foram inseridos, o comando não deveria falhar, porquê pela mensagem de erro ele está acusando falha na validação da FK com a tabela de clientes!

Um outro detalhe, suas colunas de ID são do tipo BIGINT, mas nos comandos de insert você está fornecendo um VARCHAR, não tenho certeza se isso poderia ser um problema, não me recordo se a engine do banco tem capacidade de fazer a conversão do tipo do dado fornecido.

Lucas_Camara

Nas tabelas clientes e livros, os IDs foram definidos como BIGINT, e nos INSERTs vc está passando como texto (entre aspas), é isso mesmo? Os inserts estão funcionando corretamente?

Criado 11 de dezembro de 2022
Ultima resposta 12 de dez. de 2022
Respostas 4
Participantes 3