✏️ Explanatory Question
Level: Advanced — Triggers automate actions in response to data changes; common in auditing scenarios.
A trigger is a special stored program that automatically executes ("fires") in response to a specific event on a table — namely an INSERT, UPDATE, or DELETE. You don't call a trigger; the database invokes it automatically.
| Timing | INSERT | UPDATE | DELETE |
|---|---|---|---|
| BEFORE | BEFORE INSERT | BEFORE UPDATE | BEFORE DELETE |
| AFTER | AFTER INSERT | AFTER UPDATE | AFTER DELETE |
-- BEFORE INSERT: auto-format data before it is stored
DELIMITER $$
CREATE TRIGGER before_emp_insert
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
SET NEW.email = LOWER(NEW.email); -- standardize email
END $$
DELIMITER ;
-- AFTER UPDATE: log salary changes to an audit table
DELIMITER $$
CREATE TRIGGER after_salary_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary <> NEW.salary THEN
INSERT INTO salary_audit(emp_id, old_salary, new_salary, changed_at)
VALUES (OLD.emp_id, OLD.salary, NEW.salary, NOW());
END IF;
END $$
DELIMITER ;
-- View triggers on the database
SHOW TRIGGERS;