Erro foreign key constraint Mysql

Estou com o seguinte erro ao tentar realizar um insert no meu banco

Cannot add or update a child row: a foreign key constraint fails (sca.ctrc, CONSTRAINT fk_ctrc_planoContas FOREIGN KEY (ctrcCodigo) REFERENCES planocontas (ID) ON DELETE NO ACTION ON UPDATE NO ACTION)

Qual a estrutura da tabela na qual está tentando fazer o insert? Pela mensagem de erro, você está tentando preencher um campo que não tem um id correspondente na tabela planocontas.

Abraço.

vou enviar a estrutura da tabela CTRC abaixo

Field  Type    Null    Key Default Extra
ctrcCodigo  int(10) unsigned    NO  PRI     auto_increment
ctrcCodEntradas int(10) unsigned    YES MUL     
ctrcCodSituacoesPisCofins   int(10) unsigned    YES MUL     
ctrcCNPJ    char(14)    YES         
ctrcIE  char(14)    YES         
ctrcDataEmissao date    NO          
ctrcUF  char(2) YES         
ctrcModelo  char(2) NO          
ctrcSerie   char(1) NO          
ctrcSubSerie    char(2) YES         
ctrcNumero  char(9) NO          
ctrcCFOP    char(4) NO          
ctrcValorDocumento  decimal(15,2)   NO          
ctrcBaseCalculo decimal(15,2)   YES         
ctrcValorICMS   decimal(15,2)   YES         
ctrcValorIsenta decimal(15,2)   YES         
ctrcValorOutras decimal(15,2)   YES         
ctrcCIFFOBOutros    char(1) NO          
ctrcSituacao    char(1) NO          
ctrcProprioTerceiro char(8) NO          
ctrcFornecedor  int(10) unsigned    YES         
ctrcCliente int(10) unsigned    YES         
ctrcEmpresa int(10) unsigned    YES         
ctrcCodEmpresa  int(10) unsigned    NO          
ctrcCodDestinatario int(10) unsigned    YES         
ctrcCNPJDestinatario    char(14)    YES         
ctrcIEDestinatario  char(14)    YES         
ctrcUFDestinatario  char(2) YES         
ctrcNomeTransportador   varchar(100)    YES         
ctrcChaveAcesso char(44)    YES         
ctrcAliquotaPIS decimal(5,2)    YES         
ctrcBaseCalculoPIS  decimal(15,2)   YES         
ctrcValorPIS    decimal(15,2)   YES         
ctrcAliquotaCofins  decimal(5,2)    YES         
ctrcBaseCalculoCofins   decimal(15,2)   YES         
ctrcValorCofins decimal(15,2)   YES         
ctrcDataChegada date    YES         
ctrcCodPlanoConta   char(16)    YES MUL

Faltou a definição da chave estrangeira (geralmente fica separado da estrutura da tabela quando você olha a estrutura).

De toda forma, você precisa verificar se os valores que está inserindo tem uma referência válida pra tabela planoconta, ou deixar o respectivo campo nulo, ou gerar o registro necessário na tabela planoconta antes de tentar inserir nessa tabela.

Por exemplo:

tabela Produto(
  id, 
  descricao
);

tabela ItemVenda(
  id,
  idProduto chave estrangeira -> Produto.id
  valor
);

Se a tabela produto tiver os seguintes registros:

{1, "Caixa"}
{2, "Sacola"}
{3, "Pacote"}

Você só pode inserir em ItemVenda se para o campo idProduto, os valores forem 1, 2, 3 ou nulo (se a coluna permitir valores nulos).

insert into ItemVenda values (1, 1, 10); // ok
insert into ItemVenda values (2, 2, 44); // ok
insert into ItemVenda values (2, 7, 20); // erro de chave estrangeira, não tem registro com id 7 em Produto
insert into ItemVenda values (2, 3, 11); // ok
insert into ItemVenda values (2, null, 11); // ok

Abraço.

Desculpa, eu entendi o erro, agora preciso entender como realizar a solução.(sou iniciante na área de programação banco de dados)

Esta FK parece-me estar a ser criada sobre a coluna errada. De certeza que deveria ser sobre ctrcCodigo que é um autoincrement? Não deveria ser outra coluna, talvez ctrcCodPlanoConta, pelo nome das colunas?

1 curtida

Alterei a chave estrangeira e deu certo. obrigado a todos