What if your database could remember every change for you, perfectly and instantly?
Why UPDATE trigger with OLD and NEW in SQL? - Purpose & Use Cases
Imagine you have a big notebook where you write down all changes made to your friends' contact details by hand. Every time a phone number changes, you try to remember the old one and write the new one next to it.
This manual way is slow and confusing. You might forget the old number, mix up entries, or lose track of who changed what and when. It's hard to keep everything accurate and up-to-date.
An UPDATE trigger with OLD and NEW values automatically watches for changes in your data. It remembers the old information and compares it with the new, so you can track updates easily and react to them without mistakes.
Manually check old value, then update and log changes in separate steps.
CREATE TRIGGER trg_update BEFORE UPDATE ON contacts FOR EACH ROW BEGIN -- OLD and NEW let you compare and act on changes; END;
This lets your database automatically track and respond to data changes, keeping your information accurate and reliable without extra effort.
When a customer updates their address, the trigger can save the old address for records and notify the shipping department about the change instantly.
Manual tracking of data changes is slow and error-prone.
UPDATE triggers use OLD and NEW to automatically detect and handle changes.
This keeps data accurate and helps automate important follow-up actions.
Practice
OLD and NEW keywords represent in an UPDATE trigger?Solution
Step 1: Understand trigger timing
In anUPDATEtrigger,OLDholds the row data before the update happens.Step 2: Understand data after update
NEWholds the row data after the update is applied.Final Answer:
OLDis the data before update;NEWis the data after update -> Option DQuick Check:
OLD = before, NEW = after [OK]
- Confusing OLD and NEW roles
- Thinking both OLD and NEW hold same data
- Assuming OLD is after update
salary inside an UPDATE trigger?Solution
Step 1: Identify how to reference NEW values in triggers
Inside anUPDATEtrigger, you access new column values usingNEW.column_name.Step 2: Match syntax for column
So, the correct way issalaryNEW.salary.Final Answer:
NEW.salary -> Option AQuick Check:
Use NEW.column_name to get updated value [OK]
- Using OLD.salary to get new value
- Trying to SELECT from NEW as a table
- Incorrect UPDATE syntax inside trigger
UPDATE trigger:IF NEW.status = 'active' AND OLD.status = 'inactive' THEN
INSERT INTO log_table(action) VALUES('Activated');
END IF;What happens when a row's
status changes from 'inactive' to 'active'?Solution
Step 1: Understand the condition in the trigger
The condition checks if the new status is 'active' and the old status was 'inactive'.Step 2: Effect of condition being true
If true, it inserts a row intolog_tablewith action 'Activated'.Final Answer:
A new row with action 'Activated' is inserted intolog_table-> Option BQuick Check:
Condition true triggers insert [OK]
- Thinking OLD and NEW cannot be compared
- Assuming no insert happens on status change
- Believing update cancels automatically
CREATE TRIGGER trg_update BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
IF NEW.salary < OLD.salary THEN
SET NEW.salary = OLD.salary;
END IF;
END;But when you try to update salary to a lower value, it still changes. What is the problem?
Solution
Step 1: Check trigger syntax completeness
In many SQL systems, triggers require a delimiter change to define the body properly.Step 2: Missing delimiter causes trigger body to be incomplete
Without proper delimiters, the trigger may not compile or behave as expected.Final Answer:
The trigger syntax is missing a delimiter or terminator -> Option AQuick Check:
Triggers need delimiters to parse body correctly [OK]
- Assuming AFTER triggers can modify NEW
- Thinking NEW cannot be assigned in BEFORE triggers
- Ignoring delimiter requirements in SQL triggers
UPDATE trigger that prevents lowering a product's price. If the new price is less than the old price, the trigger should reset the price to the old value and log the attempt. Which trigger code correctly implements this?Solution
Step 1: Identify correct trigger timing and condition
Use a BEFORE UPDATE trigger to modify NEW values before update. Condition should check if NEW.price is less than OLD.price.Step 2: Correctly reset price and log attempt
If condition true, set NEW.price = OLD.price to prevent lowering, then insert a log record with OLD and attempted NEW price.Final Answer:
BEFORE UPDATE trigger that prevents lowering price and logs the attempt -> Option CQuick Check:
BEFORE UPDATE + NEW.price < OLD.price + reset + log [OK]
- Using AFTER UPDATE and trying to modify NEW
- Reversing price comparison logic
- Not logging the attempted price change
Ready to prove it?
Pass the test and this pattern moves unknown
