· 4 years ago · Jun 16, 2021, 07:16 PM
1CREATE DATABASE IF NOT EXISTS trigger_exemplo;
2
3USE trigger_exemplo;
4
5CREATE TABLE IF NOT EXISTS produtos
6(
7 idProduto INT UNSIGNED NOT NULL AUTO_INCREMENT,
8 nome VARCHAR (50),
9 preco FLOAT,
10 qtd SMALLINT,
11 PRIMARY KEY (idProduto)
12);
13
14CREATE TABLE IF NOT EXISTS itens
15(
16 idCompra INT UNSIGNED,
17 idProduto INT UNSIGNED,
18 qtd INT,
19 PRIMARY KEY (idCompra),
20 FOREIGN KEY (idProduto) REFERENCES produtos (idProduto)
21);
22
23INSERT INTO
24 produtos (nome, preco, qtd)
25VALUES
26 ('Caneta', 1.00, 10),
27 ('Lápis', 0.50, 50),
28 ('Borracha', 0.20, 100);
29
30# --------------------------------
31
32# Exemplo 1
33
34# Um trigger para dar baixa em estoque
35
36DELIMITER //
37CREATE TRIGGER
38 tg_diminuir_estoque
39AFTER INSERT ON
40 itens
41FOR EACH ROW
42BEGIN
43 UPDATE
44 produtos
45 SET
46 qtd = qtd - NEW.qtd
47 WHERE
48 idProduto = NEW.idProduto;
49END;
50//
51DELIMITER ;
52
53# Testando
54
55SELECT * FROM produtos;
56
57
58INSERT INTO
59 itens (idCompra, idProduto, qtd)
60VALUES
61 (1, 1, 5);
62
63
64SELECT * FROM produtos;
65
66# --------------------------------
67
68# Exemplo 2
69
70# O comprador desistiu de comprar toda aquela quantidade do item.
71
72DELIMITER //
73CREATE TRIGGER
74 tg_devolverTudo_estoque
75BEFORE DELETE ON
76 itens
77FOR EACH ROW
78BEGIN
79 UPDATE
80 produtos
81 SET
82 qtd = qtd + OLD.qtd
83 WHERE
84 idProduto = OLD.idProduto;
85END;
86//
87DELIMITER ;
88
89# Testando
90
91SELECT * FROM produtos;
92
93
94DELETE FROM
95 itens
96WHERE
97 idProduto = 1 AND idCompra = 1;
98
99
100SELECT * FROM produtos;
101
102# --------------------------------
103
104# Exemplo 3
105
106# O Comprador devolve parcialmente itens.
107
108DELIMITER //
109CREATE TRIGGER
110 tg_devolverParcial_estoque
111AFTER UPDATE ON
112 itens
113FOR EACH ROW
114BEGIN
115 UPDATE
116 produtos
117 SET
118 qtd = qtd + (OLD.qtd - NEW.qtd)
119 WHERE
120 idProduto = OLD.idProduto;
121 END;
122//
123DELIMITER ;
124
125# Testando
126
127INSERT INTO
128 itens (idCompra, idProduto, qtd)
129VALUES
130 (1, 1, 5);
131
132SELECT * FROM produtos;
133
134UPDATE
135 itens
136SET
137 qtd = 2
138WHERE
139 idCompra = 1 AND idProduto = 1;
140
141SELECT * FROM produtos;