· 5 years ago · Mar 12, 2020, 05:00 PM
1DROP DATABASE IF EXISTS articulo;
2CREATE DATABASE articulo;
3USE articulo;
4
5CREATE TABLE articulos(
6 id SMALLINT PRIMARY KEY ,
7 tipo CHAR NOT NULL ,
8 nombre VARCHAR(12) NOT NULL
9);
10INSERT INTO articulos(id , tipo , nombre)
11VALUES(0 , 'A' , 'artiA1');
12
13INSERT INTO articulos(id , tipo , nombre)
14VALUES(1 , 'A' , 'artiA2');
15
16INSERT INTO articulos(id , tipo , nombre)
17VALUES(2 , 'D' , 'artiD1');
18
19INSERT INTO articulos(id , tipo , nombre)
20VALUES(3 , 'A' , 'artiA3');
21
22INSERT INTO articulos(id , tipo , nombre)
23VALUES(4 , 'A' , 'artiA4');
24
25INSERT INTO articulos(id , tipo , nombre)
26VALUES(5 , 'B' , 'artiB1');
27
28INSERT INTO articulos(id , tipo , nombre)
29VALUES(6 , 'B' , 'artiB2');
30
31INSERT INTO articulos(id , tipo , nombre)
32VALUES(7 , 'C' , 'artiC1');
33
34CREATE TABLE numtipoproducto
35SELECT tipo , COUNT(id) AS 'cont'
36FROM articulos
37WHERE tipo IS NOT NULL
38
39
40/*1*/
41
42/*alta*/
43
44DROP TRIGGER IF EXISTS tr_alta ;
45
46DELIMITER //
47CREATE TRIGGER tr_alta
48 AFTER INSERT
49 ON articulo
50 FOR EACH ROW
51 BEGIN
52
53 IF NEW.tipo IN (SELECT tipo
54 FROM numtipoproducto)
55 THEN
56 UPDATE numtipoproducto
57 SET cont = cont + 1
58 WHERE NEW.tipo = tipo ;
59 ELSE
60 INSERT INTO numtipoproducto VALUES(
61 NEW.tipo, 1 );
62 END IF;
63
64 END //
65DELIMITER ;
66
67
68/*modificacion*/
69
70DROP TRIGGER IF EXISTS tr_modi ;
71
72DELIMITER //
73CREATE TRIGGER tr_modi
74 AFTER UPDATE
75 ON articulo
76 FOR EACH ROW
77 BEGIN
78
79 SET cont = cont - 1
80 WHERE OLD.tipo = tipo ;
81
82 IF 0 = (SELECT cont
83 FROM numtipoproducto
84 WHERE OLD.tipo = tipo)
85 THEN
86 DELETE FROM numtipoproducto
87 WHERE OLD.tipo = tipo;
88 END IF;
89
90 END //
91DELIMITER ;
92
93/*baja*/
94
95DROP TRIGGER IF EXISTS tr_baja ;
96
97DELIMITER //
98CREATE TRIGGER tr_baja
99 BEFORE DELETE
100 ON articulo
101 FOR EACH ROW
102 BEGIN
103 IF NEW.tipo <> OLD.tipo
104 THEN
105 IF NEW.tipo IN (SELECT tipo FROM numtipoproducto)
106 THEN
107 UPDATE numtipoproducto
108 SET cont = cont - 1
109 WHERE OLD.tipo = tipo ;
110
111 UPDATE numtipoproducto
112 SET cont = cont + 1
113 WHERE NEW.tipo = tipo ;
114 ELSE
115 UPDATE numtipoproducto
116 SET cont = cont - 1
117 WHERE OLD.tipo = tipo ;
118
119 INSERT INTO numtipoproducto VALUES(
120 NEW.tipo, 1);
121 END IF;
122
123 IF 0 = (SELECT cont
124 FROM numtipoproducto
125 WHERE OLD.tipo = tipo)
126 THEN
127 DELETE FROM numtipoproducto
128 WHERE OLD.tipo = tipo;
129 END IF ;
130 END IF ;
131 END //
132DELIMITER ;