A DELETE trigger is a special procedure that automatically runs before or after a row is deleted from a table. It helps to perform actions like logging or checking conditions when a delete happens.
Click to reveal answer
beginner
When does a BEFORE DELETE trigger execute?
A BEFORE DELETE trigger runs just before a row is deleted from the table. It can be used to check or modify data before the deletion happens.
Click to reveal answer
intermediate
Can a DELETE trigger prevent a row from being deleted?
Yes, a BEFORE DELETE trigger can prevent deletion by signaling an error or condition that stops the delete operation.
Click to reveal answer
intermediate
Write a simple DELETE trigger that logs deleted row IDs into a log table.
CREATE TRIGGER log_delete BEFORE DELETE ON your_table FOR EACH ROW BEGIN
INSERT INTO delete_log (deleted_id) VALUES (OLD.id);
END;
Click to reveal answer
intermediate
What is the difference between BEFORE DELETE and AFTER DELETE triggers?
BEFORE DELETE triggers run before the row is deleted and can stop the deletion. AFTER DELETE triggers run after the row is deleted and cannot stop the deletion but can perform follow-up actions.
Click to reveal answer
What keyword specifies a trigger that runs before a row is deleted?
AAFTER DELETE
BWHEN DELETE
CON DELETE
DBEFORE DELETE
✗ Incorrect
BEFORE DELETE triggers run before the deletion happens.
Which of these can a DELETE trigger NOT do?
AModify the row after deletion
BPrevent deletion in BEFORE DELETE trigger
CRun automatically on delete
DLog deleted rows
✗ Incorrect
After deletion, the row no longer exists, so you cannot modify it.
In MySQL, what does OLD refer to inside a DELETE trigger?
AThe new row after deletion
BThe row before deletion
CThe table name
DThe trigger name
✗ Incorrect
OLD refers to the row data before it is deleted.
Which trigger timing cannot stop a delete operation?
AAFTER DELETE
BBEFORE UPDATE
CBEFORE DELETE
DBEFORE INSERT
✗ Incorrect
AFTER DELETE triggers run after deletion and cannot stop it.
What is the correct syntax to create a DELETE trigger in MySQL?
ACREATE TRIGGER trigger_name ON DELETE table_name FOR EACH ROW BEGIN ... END;
BCREATE DELETE TRIGGER trigger_name ON table_name BEGIN ... END;
CCREATE TRIGGER trigger_name BEFORE DELETE ON table_name FOR EACH ROW BEGIN ... END;
DCREATE TRIGGER trigger_name AFTER DELETE table_name BEGIN ... END;
✗ Incorrect
The correct syntax uses CREATE TRIGGER with BEFORE or AFTER DELETE, ON table_name, and FOR EACH ROW.
Explain what a DELETE trigger is and when it runs in MySQL.
Think about what happens before and after a row is removed.
You got /4 concepts.
Describe how you can use a DELETE trigger to log deleted rows.
Consider saving the ID of the row before it disappears.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of a DELETE trigger in MySQL?
easy
A. To automatically run code when a row is deleted
B. To insert new rows into a table
C. To update rows before selecting them
D. To create new tables dynamically
Solution
Step 1: Understand what triggers do
Triggers run automatically when certain actions happen on a table, like DELETE.
Step 2: Identify the purpose of DELETE triggers
DELETE triggers specifically run when rows are deleted to perform extra tasks.
Final Answer:
To automatically run code when a row is deleted -> Option A
Quick Check:
DELETE triggers = automatic code on row deletion [OK]
Hint: Triggers run automatically on data changes like DELETE [OK]
Common Mistakes:
Confusing DELETE triggers with INSERT or UPDATE triggers
Thinking triggers create or modify tables
Believing triggers run only manually
2. Which of the following is the correct syntax to create a BEFORE DELETE trigger in MySQL?
easy
A. CREATE TRIGGER trg BEFORE DELETE ON table_name FOR EACH ROW BEGIN ... END;
B. CREATE TRIGGER trg AFTER DELETE ON table_name FOR EACH ROW BEGIN ... END;
C. CREATE TRIGGER trg BEFORE UPDATE ON table_name FOR EACH ROW BEGIN ... END;
D. CREATE TRIGGER trg BEFORE DELETE FROM table_name BEGIN ... END;
Solution
Step 1: Recall the correct trigger syntax
MySQL triggers use CREATE TRIGGER name BEFORE|AFTER event ON table FOR EACH ROW BEGIN ... END;
Step 2: Match syntax for BEFORE DELETE
CREATE TRIGGER trg BEFORE DELETE ON table_name FOR EACH ROW BEGIN ... END; matches this exactly with BEFORE DELETE and correct structure.
Final Answer:
CREATE TRIGGER trg BEFORE DELETE ON table_name FOR EACH ROW BEGIN ... END; -> Option A
Quick Check:
Correct syntax = CREATE TRIGGER trg BEFORE DELETE ON table_name FOR EACH ROW BEGIN ... END; [OK]
Hint: Syntax: CREATE TRIGGER name BEFORE|AFTER DELETE ON table [OK]
Common Mistakes:
Using AFTER instead of BEFORE when asked
Wrong event like UPDATE instead of DELETE
Missing FOR EACH ROW clause
3. Given this trigger and table:
CREATE TABLE users (id INT, name VARCHAR(20));
CREATE TRIGGER log_delete AFTER DELETE ON users FOR EACH ROW BEGIN
INSERT INTO deleted_log VALUES (OLD.id, OLD.name);
END;
What happens when DELETE FROM users WHERE id=1; is executed?
medium
A. The row with id=1 is deleted but nothing is logged
B. The row with id=1 is deleted and its data is inserted into deleted_log
C. The DELETE statement fails with a syntax error
D. The row with id=1 is not deleted because of the trigger
Solution
Step 1: Understand AFTER DELETE trigger behavior
The trigger runs after a row is deleted and inserts OLD row data into deleted_log.
Step 2: Analyze the DELETE command effect
Deleting id=1 removes that row and the trigger logs its data into deleted_log.
Final Answer:
The row with id=1 is deleted and its data is inserted into deleted_log -> Option B
Quick Check:
AFTER DELETE trigger logs deleted row [OK]
Hint: AFTER DELETE triggers run after row removal to log data [OK]
Common Mistakes:
Thinking trigger prevents deletion
Assuming no logging happens
Confusing OLD with NEW in DELETE triggers
4. Identify the error in this trigger definition:
CREATE TRIGGER trg BEFORE DELETE ON users
BEGIN
INSERT INTO deleted_log VALUES (OLD.id, OLD.name);
END;
medium
A. Using NEW in a DELETE trigger is invalid
B. BEFORE DELETE triggers cannot modify data
C. Trigger body must be a single statement without BEGIN...END
D. Missing FOR EACH ROW clause
Solution
Step 1: Check trigger syntax requirements
MySQL requires FOR EACH ROW clause in row-level triggers.
Step 2: Identify missing FOR EACH ROW
The trigger lacks FOR EACH ROW, causing syntax error.
Final Answer:
Missing FOR EACH ROW clause -> Option D
Quick Check:
FOR EACH ROW is mandatory in triggers [OK]
Hint: Always include FOR EACH ROW in row-level triggers [OK]
Common Mistakes:
Using NEW in DELETE triggers (allowed only OLD)
Omitting FOR EACH ROW clause
Incorrect BEGIN...END usage
5. You want to prevent deletion of rows in the orders table if the order status is 'shipped'. Which DELETE trigger logic is correct?
hard
A. CREATE TRIGGER trg BEFORE DELETE ON orders FOR EACH ROW BEGIN IF NEW.status = 'shipped' THEN DELETE FROM orders WHERE id = OLD.id; END IF; END;
B. CREATE TRIGGER trg AFTER DELETE ON orders FOR EACH ROW BEGIN IF NEW.status = 'shipped' THEN ROLLBACK; END IF; END;
C. CREATE TRIGGER trg BEFORE DELETE ON orders FOR EACH ROW BEGIN IF OLD.status = 'shipped' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete shipped orders'; END IF; END;
D. CREATE TRIGGER trg BEFORE DELETE ON orders FOR EACH ROW BEGIN IF OLD.status = 'shipped' THEN UPDATE orders SET status = 'cancelled' WHERE id = OLD.id; END IF; END;
Solution
Step 1: Understand how to prevent deletion
Use BEFORE DELETE trigger and SIGNAL to raise an error and stop deletion.
Step 2: Analyze each option's logic
CREATE TRIGGER trg BEFORE DELETE ON orders FOR EACH ROW BEGIN IF OLD.status = 'shipped' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete shipped orders'; END IF; END; correctly uses BEFORE DELETE, checks OLD.status, and signals error to prevent deletion.
Final Answer:
CREATE TRIGGER trg BEFORE DELETE ON orders FOR EACH ROW BEGIN IF OLD.status = 'shipped' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete shipped orders'; END IF; END; -> Option C
Quick Check:
Use SIGNAL in BEFORE DELETE to block deletion [OK]
Hint: Use SIGNAL in BEFORE DELETE to stop unwanted deletions [OK]
Common Mistakes:
Using AFTER DELETE to prevent deletion (too late)
Using NEW in DELETE triggers (only OLD is valid)
Trying to delete inside a DELETE trigger causing recursion
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.