0
So folks I’m needing a little help on some Mysql activities related to Trigger, basically it’s three Trigger.
First Trigger should work after an update or Insert(something I’ll still put) the product stock should change to the quantity purchased. But it ends up changing the stock of all products, I know it’s a simple logic but I’m not getting it.
The second should be every sale the stock should decrease where the logic does not work completely yet
And finally the last would be if a purchase is deleted and if you have sufficient quantity in stock should be decreased, if it has not be canceled.
DROP DATABASE IF EXISTS DBPEDIDO;
CREATE DATABASE DBPEDIDO;
USE DBPEDIDO;
CREATE TABLE PRODUTO (
IDPRODUTO INT NOT NULL AUTO_INCREMENT
, NOME VARCHAR(45)
, ESTOQUE INT
, PRIMARY KEY(IDPRODUTO)
);
CREATE TABLE COMPRA (
IDCOMPRA INT NOT NULL AUTO_INCREMENT
, IDPRODUTO INT NOT NULL
, QTDE INT
, PRECOUNITARIO NUMERIC(8,2)
, PRIMARY KEY (IDCOMPRA)
, FOREIGN KEY (IDPRODUTO) REFERENCES PRODUTO(IDPRODUTO)
);
CREATE TABLE VENDA (
IDVENDA INT NOT NULL AUTO_INCREMENT
, IDPRODUTO INT NOT NULL
, QTDE INT
, PRECOUNITARIO NUMERIC(8,2)
, PRIMARY KEY (IDVENDA)
, FOREIGN KEY (IDPRODUTO) REFERENCES PRODUTO(IDPRODUTO)
);
INSERT INTO PRODUTO(IDPRODUTO, NOME, ESTOQUE) VALUES(NULL, 'COLHER', 1);
INSERT INTO COMPRA(IDCOMPRA, IDPRODUTO, QTDE, PRECOUNITARIO) VALUES(NULL, 1, 452, 1);
INSERT INTO VENDA(IDVENDA, IDPRODUTO, QTDE, PRECOUNITARIO) VALUES(NULL, 1, 20, 2);
ALTER TABLE PRODUTO AUTO_INCREMENT = 1;
ALTER TABLE COMPRA AUTO_INCREMENT = 1;
ALTER TABLE VENDA AUTO_INCREMENT = 1;
SELECT * FROM COMPRA;
SELECT * FROM PRODUTO;
SELECT * FROM VENDA;
DROP TRIGGER TR_VENDA_UPDATE;
DROP TRIGGER TR_COMPRA_DELETE;
DROP TRIGGER TR_PRODUTO_UPDATE;
-- ----------------------------------------------------- --
-- trigger update produto--
DELIMITER $$
CREATE TRIGGER TR_PRODUTO_UPDATE AFTER UPDATE ON COMPRA FOR EACH ROW
UPDATE PRODUTO SET ESTOQUE = ( SELECT QTDE FROM COMPRA )
WHERE ESTOQUE = ESTOQUE
-- testei com IDPRODUTO onde pensei que deveria modificar apenas o produto referente ao id
$$
DELIMITER ;
-- trigger update produto--
-- ----------------------------------------------------- --
-- ----------------------------------------------------- --
-- trigger update venda--
DELIMITER $$
CREATE TRIGGER TR_VENDA_UPDATE AFTER UPDATE ON VENDA FOR EACH ROW
UPDATE PRODUTO SET ESTOQUE = (ESTOQUE - (SELECT QTDE from VENDA) )
where IDPRODUTO = IDPRODUTO
$$
DELIMITER ;
-- trigger update venda--
-- ----------------------------------------------------- --
-- ----------------------------------------------------- --
-- trigger delete estoque--
DELIMITER $$
CREATE TRIGGER TR_COMPRA_DELETE AFTER DELETE ON COMPRA FOR EACH ROW
IF cq = (select QTDE from COMPRA) >= pe = (select ESTOQUE FROM PRODUTO) THEN
UPDATE PRODUTO SET ESTOQUE = (cq - pe )
where ESTOQUE = ESTOQUE;
END IF
$$
DELIMITER ;
-- trigger delete estoque--
-- ------------------------------------------------------------- --
On the first Trigger the line
WHERE ESTOQUE = ESTOQUE
will always betrue
then it will update all rows of the table.– Augusto Vasques
yes, that’s right, I just want to update related to the product, update products individually, you know?
– Tiago Abdalla
From a read in the keywords
OLD
andNEW
– Augusto Vasques