Error 1452 mysql: foreign key error

Asked

Viewed 334 times

1

I created two product tables to tbl_produto and the tbl_adiciona, so instead of every time I want to update the stock, I don’t have two equal data in the product table, but in an outside 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, until the ELSE. I made this code block in case I added a non-existent record in the product table, it automatically inserted in the table and made the next records with the same code be updated in the product table, there are no 2 equal products in the same table (except for the tbl_adiciona, since it serves as a log).

the log of the problem 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 table for test :

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);
  • Already have data in any of the tables?

  • Yes! I just added them to the topic

  • The current fields of the operation must be handled by . old and . new https://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html

  • Great, thanks! Helped a lot in what I had already researched

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.