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

  • BEFORE
  • AFTER

(B) Event

  • INSERT
  • UPDATE
  • DELETE

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

KeywordMeaning
NEW.columnNew value (INSERT / UPDATE)
OLD.columnOld 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;