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?
– Jéf Bueno
Yes! I just added them to the topic
– Walter Felipe
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
– Motta
Great, thanks! Helped a lot in what I had already researched
– Walter Felipe