Skip to content

Commit b12cbee

Browse files
committed
triggers and events
1 parent 709b1d6 commit b12cbee

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed

Diff for: Complete SQL Mastery - Mosh/Triggers and Events.sql

+154
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
/************************************************/
2+
/* Triggers */
3+
/************************************************/
4+
5+
SELECT * FROM mosh_sql_invoicing.invoices;
6+
SELECT * FROM mosh_sql_invoicing.payments;
7+
8+
/* update total of invoice table, if there is payment added to the payment table */
9+
USE mosh_sql_invoicing;
10+
11+
DELIMITER $$
12+
CREATE TRIGGER payments_after_insert
13+
AFTER INSERT ON payments
14+
FOR EACH ROW
15+
BEGIN
16+
UPDATE invoices
17+
SET payment_total = payment_total + NEW.amount
18+
WHERE invoice_id = NEW.invoice_id;
19+
END $$
20+
DELIMITER ;
21+
22+
/*testing*/
23+
INSERT INTO payments
24+
VALUES(DEFAULT,5,3,'2020-04-05',100,1);
25+
26+
27+
/* trigger that gets fired when we delete the payment */
28+
DROP TRIGGER IF EXISTS payments_after_delete;
29+
30+
DELIMITER $$
31+
CREATE TRIGGER payments_after_delete
32+
AFTER DELETE ON payments
33+
FOR EACH ROW
34+
BEGIN
35+
UPDATE invoices
36+
SET payment_total = payment_total - OLD.amount
37+
WHERE invoice_id = OLD.invoice_id;
38+
END $$
39+
DELIMITER ;
40+
41+
/*testing*/
42+
DELETE FROM payments
43+
WHERE payment_id = 9;
44+
45+
/************************************************/
46+
/* View Triggers */
47+
/************************************************/
48+
SHOW TRIGGERS;
49+
50+
SHOW TRIGGERS LIKE '%payments%';
51+
52+
53+
/************************************************/
54+
/* Drop Triggers */
55+
/************************************************/
56+
57+
DROP TRIGGER IF EXISTS payments_after_delete;
58+
59+
60+
/************************************************/
61+
/* Using Triggers for Auditing */
62+
/************************************************/
63+
64+
USE mosh_sql_invocing;
65+
66+
CREATE TABLE payments_audit(
67+
client_id INT NOT NULL,
68+
date DATE NOT NULL,
69+
amount DECIMAL(9,2) NOT NULL,
70+
action_type VARCHAR(50) NOT NULL,
71+
action_date DATETIME NOT NULL
72+
);
73+
74+
/*trigger for auditing records for insert */
75+
DROP TRIGGER IF EXISTS payments_after_insert;
76+
77+
DELIMITER $$
78+
CREATE TRIGGER payments_after_insert
79+
AFTER INSERT ON payments
80+
FOR EACH ROW
81+
BEGIN
82+
UPDATE invoices
83+
SET payment_total = payment_total + NEW.amount
84+
WHERE invoice_id = NEW.invoice_id;
85+
86+
INSERT INTO payments_audit
87+
VALUES(NEW.client_id, NEW.date, NEW.amount, 'INSERT', NOW());
88+
END $$
89+
DELIMITER ;
90+
91+
92+
/*trigger for auditing records for delete */
93+
DROP TRIGGER IF EXISTS payments_after_delete;
94+
95+
DELIMITER $$
96+
CREATE TRIGGER payments_after_delete
97+
AFTER DELETE ON payments
98+
FOR EACH ROW
99+
BEGIN
100+
UPDATE invoices
101+
SET payment_total = payment_total - OLD.amount
102+
WHERE invoice_id = OLD.invoice_id;
103+
104+
INSERT INTO payments_audit
105+
VALUES(OLD.client_id, OLD.date, OLD.amount, 'DELETE', NOW());
106+
END $$
107+
DELIMITER ;
108+
109+
110+
/*testing*/
111+
SELECT * FROM payments_audit;
112+
113+
INSERT INTO payments
114+
VALUES(DEFAULT,5,3,'2020-04-05',100,1);
115+
116+
DELETE FROM payments
117+
WHERE payment_id = 10;
118+
119+
120+
/***************************************************/
121+
/* Events */
122+
/* Tasks that get executed according to a scheduel */
123+
/***************************************************/
124+
125+
SHOW VARIABLES LIKE 'event%';
126+
127+
-- usually it is ON, but some organiazion it might be turned off to save resources.
128+
SET GLOBAL event_scheduler = ON;
129+
130+
/* events that delete all the audit recrods which are 1 year old from today */
131+
DELIMITER $$
132+
CREATE EVENT yearly_delete_stale_audit_rows
133+
ON SCHEDULE
134+
EVERY 1 YEAR STARTS '2020-01-01' ENDS '2030-12-31'
135+
DO BEGIN
136+
DELETE FROM payments_audit
137+
WHERE action_date < NOW() - INTERVAL 1 YEAR;
138+
END $$
139+
DELIMITER ;
140+
141+
142+
/***************************************************/
143+
/* View / Alter / Drop Events / Disable / Enable */
144+
/***************************************************/
145+
146+
SHOW EVENTS;
147+
148+
SHOW EVENTS like 'montly%';
149+
150+
DROP EVENT IF EXISTS yearly_delete_stale_audit_rows;
151+
152+
ALTER EVENT yearly_delete_stale_audit_rows DISABLE;
153+
154+
ALTER EVENT yearly_delete_stale_audit_rows ENABLE;

0 commit comments

Comments
 (0)