When database integrity requires automatic actions on data changes, triggers provide the solution.
MySQL triggers automatically execute in response to INSERT, UPDATE, or DELETE events on tables.
They are widely used for:
- Audit trails and logging
- Data validation and business rules
- Maintaining derived calculations
- Referential integrity enforcement
What is Trigger
Trigger is a stored program automatically executed when table undergoes DML operation.
Executes invisibly to user, always in context of triggering statement.
Trigger Timing and Events
| Timing | INSERT | UPDATE | DELETE |
| BEFORE | ✓ | ✓ | ✓ |
| AFTER | ✓ | ✓ | ✓ |
Trigger Scope
- Single table only (no cross-table triggers)
- Single statement execution
- OLD/NEW row references available
- Cannot call stored procedures (MySQL limitation)
Basic Trigger Structure
OLD and NEW References
- NEW: New row values (INSERT/UPDATE)
- OLD: Previous row values (UPDATE/DELETE)
Use Cases
- Automatically set created_date on INSERT
- Update audit log on changes
- Prevent invalid data entry
- Maintain summary tables
Performance Impact
Triggers execute for every affected row.
Permissions Required
Execution Order
- BEFORE triggers (row-by-row)
- DML statement executes
- AFTER triggers (row-by-row)
Important Limitations
- Cannot use in transactions with DDL
- No recursive triggers
- 1 trigger per event per table
- Cannot call other triggers directly
Example Scenario
Audit all student changes:
Common Mistakes
- Infinite loops (BEFORE trigger causing UPDATE)
- Poor performance on bulk operations
- Missing TRIGGER privilege
- Complex logic slowing transactions
- Forgetting OLD/NEW context
Key Points to Remember
- BEFORE/AFTER timing, INSERT/UPDATE/DELETE events
- OLD/NEW row references available
- FOR EACH ROW mandatory
- Executes automatically per affected row
- TRIGGER privilege required
- Single trigger per event per table