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

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

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.

2 curtidas

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', 'rafaelsousa.oliveira@gmail.com');
INSERT INTO `projetolivraria`.`clientes` (`id`,`nome`, `cpf`, `produto`, `email`) VALUES ('2', 'Mark Arthur', '321456789', 'OutrosProdutos', 'markarthur@gmail.com');

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.

1 curtida

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?