Trigger In SQL
Last Updated: January 2026
A Trigger is a block of SQL code that automatically runs
👉 When an INSERT, UPDATE, or DELETE happens on a table
- Maintain data integrity
- Automatically log changes
- Enforce business rules
- Update another table automatically
Trigger Timing & Events
A trigger works on TWO dimensions:
(A) Timing
BEFOREAFTER
(B) Event
INSERTUPDATEDELETE
Combination example:
- BEFORE INSERT
- AFTER UPDATE
- BEFORE DELETE
Trigger Syntax (MySQL)
CREATE TRIGGER trigger_name
BEFORE | AFTER INSERT | UPDATE | DELETE
ON table_name
FOR EACH ROW
BEGIN
SQL statements;
END;
Example 1: BEFORE INSERT Trigger
Let Salary must never be negative
CREATE TABLE employee (
id INT,
name VARCHAR(50),
salary INT
);
Create Trigger
DELIMITER $$
CREATE TRIGGER check_salary
BEFORE INSERT
ON employee
FOR EACH ROW
BEGIN
IF NEW.salary < 0 THEN
SET NEW.salary = 0;
END IF;
END$$
DELIMITER ;
What happens?
INSERT INTO employee VALUES (1, 'Rahul', -5000);
➡ Salary becomes 0 automatically ✅
OLD vs NEW in Triggers
| Keyword | Meaning |
|---|---|
NEW.column | New value (INSERT / UPDATE) |
OLD.column | Old value (UPDATE / DELETE) |
Example 2: AFTER UPDATE Trigger
Let Track salary changes
CREATE TABLE salary_log (
emp_id INT,
old_salary INT,
new_salary INT,
changed_at TIMESTAMP
);
Create Trigger
DELIMITER $$
CREATE TRIGGER log_salary_update
AFTER UPDATE
ON employee
FOR EACH ROW
BEGIN
INSERT INTO salary_log
VALUES (OLD.id, OLD.salary, NEW.salary, NOW());
END$$
DELIMITER ;
- Every salary update is logged automatically
Example 3: BEFORE DELETE Trigger
Let Prevent deleting important records
DELIMITER $$
CREATE TRIGGER prevent_delete
BEFORE DELETE
ON employee
FOR EACH ROW
BEGIN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Delete not allowed';
END$$
DELIMITER ;
View Triggers
SHOW TRIGGERS;
Drop Trigger
DROP TRIGGER trigger_name;