5 min read
•Question 14 of 29hardWhat are SQL Triggers?
Automatic actions on data changes.
What You'll Learn
- What triggers are
- Creating triggers
- Use cases
What is a Trigger?
A trigger is code that automatically executes in response to certain events on a table (INSERT, UPDATE, DELETE).
Creating Triggers
query.sqlSQL
-- MySQL
DELIMITER //
CREATE TRIGGER before_user_insert
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SET NEW.created_at = NOW();
SET NEW.status = 'pending';
END //
DELIMITER ;Trigger Types
query.sqlSQL
-- BEFORE INSERT
CREATE TRIGGER validate_email
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
IF NEW.email NOT LIKE '%@%.%' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid email';
END IF;
END;
-- AFTER INSERT
CREATE TRIGGER log_new_user
AFTER INSERT ON users
FOR EACH ROW
BEGIN
INSERT INTO audit_log (action, table_name, record_id)
VALUES ('INSERT', 'users', NEW.id);
END;
-- AFTER UPDATE
CREATE TRIGGER track_changes
AFTER UPDATE ON products
FOR EACH ROW
BEGIN
IF OLD.price != NEW.price THEN
INSERT INTO price_history (product_id, old_price, new_price)
VALUES (NEW.id, OLD.price, NEW.price);
END IF;
END;
-- AFTER DELETE
CREATE TRIGGER archive_deleted_user
AFTER DELETE ON users
FOR EACH ROW
BEGIN
INSERT INTO deleted_users (id, name, email, deleted_at)
VALUES (OLD.id, OLD.name, OLD.email, NOW());
END;OLD vs NEW
- NEW: Row data after the operation (INSERT, UPDATE)
- OLD: Row data before the operation (UPDATE, DELETE)
Managing Triggers
query.sqlSQL
-- Show triggers
SHOW TRIGGERS;
-- Drop trigger
DROP TRIGGER before_user_insert;