-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathevents_scripts.sql
More file actions
248 lines (179 loc) · 5.54 KB
/
Copy pathevents_scripts.sql
File metadata and controls
248 lines (179 loc) · 5.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
-- =========================================================
-- FILE: events.sql
-- PROJECT: TechSphere Solutions Database System
-- AUTHOR: Benard Onyango Omoga
-- DATABASE: MySQL
-- DESCRIPTION:
-- Demonstrates Events (Scheduled Automation) in MySQL
-- using the TechSphere database schema.
-- =========================================================
-- =========================================================
-- USE DATABASE
-- =========================================================
USE techsphere_solutions;
-- =========================================================
-- SECTION 1: INTRODUCTION TO EVENTS
-- PURPOSE:
-- Events are scheduled SQL tasks that execute automatically
-- based on time intervals (not table actions).
-- =========================================================
-- TYPES OF EVENTS:
-- 1. Scheduled Reporting Events
-- 2. Data Cleanup Events
-- 3. Data Archiving Events
-- =========================================================
-- SECTION 2: ENABLE EVENT SCHEDULER
-- PURPOSE:
-- Ensures MySQL event engine is active
-- =========================================================
SET GLOBAL event_scheduler = ON;
-- =========================================================
-- SECTION 3: CREATE TABLES FOR EVENTS
-- PURPOSE:
-- Store results generated by scheduled jobs
-- =========================================================
-- Salary summary log table
CREATE TABLE IF NOT EXISTS salary_summary_log
(
log_id INT AUTO_INCREMENT PRIMARY KEY,
total_employees INT,
total_payroll DECIMAL(12,2),
average_salary DECIMAL(12,2),
log_timestamp DATETIME
);
-- =========================================================
-- SECTION 4: DAILY SALARY REPORT EVENT
-- PURPOSE:
-- Generate daily payroll snapshot automatically
-- =========================================================
DELIMITER $$
CREATE EVENT daily_salary_report
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP
DO
BEGIN
INSERT INTO salary_summary_log
(
total_employees,
total_payroll,
average_salary,
log_timestamp
)
SELECT
COUNT(e.employee_id),
SUM(jr.base_salary),
AVG(jr.base_salary),
NOW()
FROM employees e
JOIN employee_positions ep
ON e.employee_id = ep.employee_id
JOIN job_roles jr
ON ep.role_id = jr.role_id;
END $$
DELIMITER ;
-- WHAT IT DOES:
-- 1. Runs automatically every day
-- 2. Calculates payroll statistics
-- 3. Stores snapshot in salary_summary_log
-- 4. Used for HR and finance reporting
-- =========================================================
-- SECTION 5: WEEKLY CLEANUP EVENT
-- PURPOSE:
-- Remove old audit logs automatically
-- =========================================================
DELIMITER $$
CREATE EVENT cleanup_old_audit_logs
ON SCHEDULE EVERY 1 WEEK
DO
BEGIN
DELETE FROM employee_audit_log
WHERE action_timestamp < NOW() - INTERVAL 90 DAY;
END $$
DELIMITER ;
-- WHAT IT DOES:
-- 1. Runs weekly
-- 2. Deletes audit logs older than 90 days
-- 3. Keeps database optimized and clean
-- =========================================================
-- SECTION 6: MONTHLY ARCHIVING EVENT
-- PURPOSE:
-- Archive long-serving employees
-- =========================================================
DELIMITER $$
CREATE EVENT archive_long_term_employees
ON SCHEDULE EVERY 1 MONTH
DO
BEGIN
INSERT INTO deleted_employees_archive
(
employee_id,
first_name,
last_name,
gender,
date_of_birth,
hire_date,
department_id,
deleted_at
)
SELECT
employee_id,
first_name,
last_name,
gender,
date_of_birth,
hire_date,
department_id,
NOW()
FROM employees
WHERE hire_date < DATE_SUB(NOW(), INTERVAL 5 YEAR);
END $$
DELIMITER ;
-- WHAT IT DOES:
-- 1. Runs monthly
-- 2. Moves old employees into archive table
-- 3. Preserves historical employee data
-- =========================================================
-- SECTION 7: VERIFY EVENTS
-- PURPOSE:
-- Check all active scheduled events
-- =========================================================
SHOW EVENTS;
-- =========================================================
-- SECTION 8: DROP EVENT (MAINTENANCE OPTION)
-- PURPOSE:
-- Remove existing events if needed
-- =========================================================
DROP EVENT IF EXISTS daily_salary_report;
-- =========================================================
-- KEY CONCEPT SUMMARY
-- =========================================================
-- EVENT:
-- A scheduled SQL task that runs automatically
-- ON SCHEDULE:
-- Defines timing (daily, weekly, monthly, etc.)
-- STARTS:
-- Defines when execution begins
-- DO BEGIN ... END:
-- Defines event logic block
-- EVENT SCHEDULER:
-- MySQL engine that runs events automatically
-- =========================================================
-- BUSINESS USE CASES
-- =========================================================
-- EVENTS ARE USED FOR:
-- - Automated reporting
-- - Payroll summaries
-- - Data cleanup
-- - Data archiving
-- - System maintenance
-- - ETL automation
-- =========================================================
-- IMPORTANT NOTES
-- =========================================================
-- Events run without user interaction
-- They reduce manual database workload
-- They improve system automation and efficiency
-- They work best with triggers for full automation systems
-- =========================================================
-- END OF FILE
-- =========================================================