Duration: 2 hours (Lecture: 2 hours, Lab: 2 hours)
Syllabus Topics:
Definition: A trigger is a stored program in MySQL that automatically executes in response to specific Data Manipulation Language (DML) events (INSERT
, UPDATE
, DELETE
) on a table.
Types:
NEW
values for INSERT
or UPDATE
operations.NEW
values (read-only access to NEW
and OLD
).Syntax:
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
BEGIN
-- Trigger logic
END;
Key Notes:
FOR EACH ROW
), not statement level.DROP TRIGGER trigger_name;
to delete a trigger.SHOW TRIGGERS;
.NEW:
INSERT
) or the updated row (UPDATE
).BEFORE
and AFTER
triggers for INSERT
and UPDATE
.BEFORE
triggers (e.g., SET NEW.column = value;
).NULL
in a BEFORE INSERT
trigger.OLD:
UPDATE
) or deletion (DELETE
).BEFORE
and AFTER
triggers for UPDATE
and DELETE
.AFTER UPDATE
trigger.Availability:
Operation | NEW Available |
OLD Available |
---|---|---|
INSERT | Yes (modifiable in BEFORE) | No |
UPDATE | Yes (modifiable in BEFORE) | Yes (read-only) |
DELETE | No | Yes (read-only) |
Key Notes:
NEW
to enforce data rules (e.g., validate or transform values).OLD
to track changes (e.g., for auditing).Examples:
BEFORE INSERT Trigger:
DELIMITER //
CREATE TRIGGER check_salary_before_insert
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
IF NEW.salary < 0 THEN
SET NEW.salary = 0;
END IF;
END //
DELIMITER ;
AFTER INSERT Trigger:
CREATE TABLE audit_log (
log_id INT AUTO_INCREMENT PRIMARY KEY,
action VARCHAR(50),
emp_id INT,
details VARCHAR(100),
action_time TIMESTAMP
);
DELIMITER //
CREATE TRIGGER log_employee_insert
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
INSERT INTO audit_log (action, emp_id, details, action_time)
VALUES ('INSERT', NEW.emp_id, CONCAT('Added ', NEW.name), NOW());
END //
DELIMITER ;
BEFORE UPDATE Trigger:
DELIMITER //
CREATE TRIGGER prevent_salary_decrease
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
IF NEW.salary < OLD.salary THEN
SET NEW.salary = OLD.salary;
END IF;
END //
DELIMITER ;
AFTER DELETE Trigger:
DELIMITER //
CREATE TRIGGER log_employee_delete
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
INSERT INTO audit_log (action, emp_id, details, action_time)
VALUES ('DELETE', OLD.emp_id, CONCAT('Deleted ', OLD.name), NOW());
END //
DELIMITER ;
Real-Time Use Cases:
orders
table in an e-commerce system for compliance.