Error 1452 mysql: foreign key error

0

I have created two product tables with tbl_produto and tbl_adiciona , so instead of every time I want to update inventory, I do not have two equal data in the product table, but in an external table.

<!-- language: lang-sql -->  
create table tbl_produto(
cod_produto int not null primary key,
nome_produto varchar(50) not null, 
quantidade int not null
);

create table tbl_adiciona(
cod_adiciona int not null primary key auto_increment,
cod_produto int not null,
nome_produto varchar(50),
quantidade int not null
);

alter table tbl_adiciona add constraint fk_codProduto foreign key(cod_produto)   
references tbl_produto (cod_produto);

Well, for this I created 2 functions and 1 trigger to help in this process.

delimiter %

CREATE FUNCTION valor()
RETURNS INT
BEGIN
    declare ultimoAdc int;
    set ultimoAdc = (select a.cod_produto from tbl_adiciona a where a.cod_adiciona = 
(select max(cod_adiciona) from tbl_adiciona));
    return ultimoAdc;
END%

delimiter $$ 

CREATE FUNCTION adicionaValor(cod int) 
RETURNS int(11)
BEGIN
    declare valorAtual int;
    declare valorAntigo int;
    select quantidade from tbl_produto where cod_produto = cod into valorAtual;
    select quantidade from tbl_adiciona where cod_produto = cod and cod_adiciona = 
    ( select cod_adiciona from tbl_adiciona where cod_produto = cod order by 
cod_adiciona DESC LIMIT 1) into
        valorAntigo;
    set @valorTot = valorAtual + valorAntigo;
    return @valorTot;
END$$

delimiter ?

create trigger trg_adiciona AFTER INSERT ON tbl_adiciona    
for each row
BEGIN
    declare cod int; 
    set cod = valor();

    if exists(select cod_produto from tbl_produto where cod_produto = cod) then 
        update tbl_produto set quantidade = adicionaValor(cod) where cod_produto = cod;
    else
        insert into tbl_produto(cod_produto,nome_produto,quantidade) 
        value
        (
          (select cod_produto from tbl_adiciona a where a.cod_produto = cod),
          (select nome_produto from tbl_adiciona a where a.cod_produto = cod),
          (select quantidade from tbl_adiciona a where a.cod_produto = cod)
        );
    end if;

END?    

The code works, up to ELSE . I made this block of code in case I added a non-existent record in the product table, it automatically inserted into the table and caused the next records with the same code to be updated in the product table, not having 2 identical products in the same table ( except the tbl_adiciona , since it serves as log).

The problem log is:

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails
 ('teste'.'tbl_adiciona', CONSTRAINT 'fk_codProduto' FOREIGN KEY ('cod_produto') REFERENCES
 'tbl_produto' ('cod_produto'))

How do I solve this problem?

EDIT: Data entered in the table for testing:

insert into tbl_produto(cod_produto,nome_produto,quantidade) values
(1,'Achocolatado',10),
(2,'Maionese',20),
(3,'Leite condensado',30);

insert into tbl_adiciona (cod_produto,nome_produto,quantidade) values
(1,'Achocolatado',20),
(2,'Maionese',10);
    
asked by anonymous 22.09.2017 / 21:13

0 answers