What if your database could stop mistakes before they even happen?
Why BEFORE trigger execution in SQL? - Purpose & Use Cases
Imagine you have a big guestbook where people write their names and messages by hand. You want to make sure no one writes a rude word before the message is added. But you have to check every single entry yourself before it goes in.
Checking every entry manually is slow and tiring. You might miss some rude words or make mistakes. It's hard to keep up when many people write at the same time, and you can't stop bad messages from slipping in.
With a BEFORE trigger, the database automatically checks or changes data before it is saved. It's like having a smart helper who reads each message first and fixes or stops bad ones instantly, without you lifting a finger.
Check message content manually before INSERT; If rude word found, reject entry;
CREATE TRIGGER before_insert_message BEFORE INSERT ON guestbook FOR EACH ROW BEGIN IF NEW.message LIKE '%rude_word%' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Inappropriate message'; END IF; END;
You can trust your data to be clean and correct automatically, saving time and avoiding errors.
Online shops use BEFORE triggers to check if a new order has valid payment info before saving it, preventing mistakes and fraud.
Manual checks are slow and error-prone.
BEFORE triggers act automatically before data is saved.
This keeps your data safe and consistent without extra work.
Practice
BEFORE trigger in SQL?Solution
Step 1: Understand trigger timing
ABEFOREtrigger runs before the data change happens, allowing checks or modifications.Step 2: Compare options
To execute code before a data modification happens correctly states the trigger runs before data modification. Options A, C, and D describe other actions not related toBEFOREtriggers.Final Answer:
To execute code before a data modification happens -> Option CQuick Check:
BEFORE trigger = runs before data change [OK]
- Confusing BEFORE with AFTER triggers
- Thinking triggers delete data automatically
- Assuming triggers create backups
BEFORE INSERT trigger in SQL?Solution
Step 1: Identify correct trigger timing and event
The question asks for aBEFORE INSERTtrigger, so timing is BEFORE and event is INSERT.Step 2: Match syntax
CREATE TRIGGER trg BEFORE INSERT ON table_name FOR EACH ROW BEGIN ... END; matchesCREATE TRIGGER trg BEFORE INSERT ON table_name FOR EACH ROW BEGIN ... END;. Other options have wrong timing or event.Final Answer:
CREATE TRIGGER trg BEFORE INSERT ON table_name FOR EACH ROW BEGIN ... END; -> Option DQuick Check:
BEFORE INSERT syntax = CREATE TRIGGER trg BEFORE INSERT ON table_name FOR EACH ROW BEGIN ... END; [OK]
- Using AFTER instead of BEFORE
- Mixing INSERT with UPDATE or DELETE
- Omitting FOR EACH ROW clause
CREATE TRIGGER check_age BEFORE INSERT ON users FOR EACH ROW BEGIN IF NEW.age < 18 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Age must be 18 or older'; END IF; END;
What happens if you try to insert a user with age 16?
Solution
Step 1: Understand trigger logic
The trigger checks if NEW.age is less than 18 and raises an error if true.Step 2: Apply to age 16
Since 16 < 18, the trigger raises an error with message 'Age must be 18 or older', stopping the insert.Final Answer:
The insert fails with an error message 'Age must be 18 or older' -> Option AQuick Check:
BEFORE trigger can stop invalid inserts [OK]
- Thinking insert succeeds despite error
- Assuming silent ignore instead of error
- Believing trigger changes data automatically
CREATE TRIGGER trg BEFORE UPDATE ON products FOR EACH ROW BEGIN SET NEW.price = NEW.price * 0.9; END;
When trying to create this trigger, you get an error. What is the likely cause?
Solution
Step 1: Check trigger syntax
The trigger body uses multiple statements and must handle delimiters properly.Step 2: Identify missing delimiter
Without changing the delimiter, the semicolon inside the body ends the statement early, causing syntax error.Final Answer:
The syntax is missing a delimiter or semicolon inside the body -> Option AQuick Check:
Use DELIMITER to define trigger body [OK]
- Thinking NEW values can't be changed in BEFORE triggers
- Ignoring delimiter changes for multi-statement bodies
- Missing FOR EACH ROW clause
quantity is never negative. Which trigger code correctly enforces this using a BEFORE INSERT trigger?Solution
Step 1: Identify correct timing and event
We want to check before inserting, soBEFORE INSERTis correct.Step 2: Check enforcement method
To stop negative quantity, raising an error with SIGNAL is best. CREATE TRIGGER trg BEFORE INSERT ON orders FOR EACH ROW BEGIN IF NEW.quantity < 0 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Negative quantity not allowed'; END IF; END; uses BEFORE INSERT and SIGNAL correctly.Step 3: Eliminate wrong options
CREATE TRIGGER trg BEFORE INSERT ON orders FOR EACH ROW BEGIN IF NEW.quantity < 0 THEN SET NEW.quantity = 0; END IF; END; silently changes quantity, not enforcing. CREATE TRIGGER trg AFTER INSERT ON orders FOR EACH ROW BEGIN IF NEW.quantity < 0 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Negative quantity not allowed'; END IF; END; uses AFTER INSERT, too late to stop insert. CREATE TRIGGER trg BEFORE UPDATE ON orders FOR EACH ROW BEGIN IF NEW.quantity < 0 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Negative quantity not allowed'; END IF; END; uses BEFORE UPDATE, not insert.Final Answer:
CREATE TRIGGER trg BEFORE INSERT ON orders FOR EACH ROW BEGIN IF NEW.quantity < 0 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Negative quantity not allowed'; END IF; END; -> Option BQuick Check:
Use BEFORE INSERT + SIGNAL to block invalid data [OK]
- Using AFTER INSERT instead of BEFORE INSERT
- Silently fixing data instead of raising error
- Checking on UPDATE instead of INSERT
Ready to prove it?
Pass the test and this pattern moves unknown
