Bird
Raised Fist0
SQLquery~5 mins

DELETE trigger in SQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a DELETE trigger in SQL?
A DELETE trigger is a special kind of stored procedure that automatically runs when a DELETE operation happens on a table. It lets you react to row deletions, like logging or preventing the delete.
Click to reveal answer
beginner
When does a DELETE trigger execute?
A DELETE trigger executes immediately before or after a DELETE statement removes rows from a table, depending on whether it is defined as BEFORE DELETE or AFTER DELETE.
Click to reveal answer
intermediate
What is the difference between BEFORE DELETE and AFTER DELETE triggers?
BEFORE DELETE triggers run before the rows are deleted, allowing you to check or modify data. AFTER DELETE triggers run after the rows are deleted, useful for actions like logging the deletion.
Click to reveal answer
intermediate
How can you access the deleted rows inside a DELETE trigger?
Inside a DELETE trigger, you can access the deleted rows using the special table called OLD (in some SQL dialects) or DELETED (in others), which holds the data of the rows being deleted.
Click to reveal answer
beginner
Why would you use a DELETE trigger in a database?
You use a DELETE trigger to automatically perform tasks like auditing deletions, enforcing business rules, preventing accidental deletes, or cleaning up related data when rows are deleted.
Click to reveal answer
What does a DELETE trigger do?
ARuns automatically when rows are deleted from a table
BRuns when rows are inserted into a table
CRuns when rows are updated in a table
DDeletes a table automatically
Which special table holds the deleted rows inside a DELETE trigger?
AOLD
BNEW
CCURRENT
DINSERTED
When does an AFTER DELETE trigger run?
ABefore rows are deleted
BBefore rows are inserted
CAfter rows are updated
DAfter rows are deleted
Which of these is NOT a common use of DELETE triggers?
ALogging deleted rows
BPreventing accidental deletes
CAutomatically inserting new rows
DCleaning up related data
Can a DELETE trigger modify the data being deleted before it happens?
ANo, only INSERT triggers can modify data
BYes, if it is a BEFORE DELETE trigger
CYes, but only AFTER DELETE triggers
DNo, triggers cannot modify data
Explain what a DELETE trigger is and when it runs.
Think about what happens when you remove rows from a table.
You got /3 concepts.
    Describe two practical uses of DELETE triggers in a database.
    Why would you want to react automatically when data is deleted?
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a DELETE trigger in a database?
      easy
      A. To insert new rows into a table
      B. To update rows before they are deleted
      C. To automatically run code when rows are deleted from a table
      D. To prevent any data from being deleted

      Solution

      1. Step 1: Understand what triggers do

        Triggers run automatically in response to certain database events like insert, update, or delete.
      2. Step 2: Focus on DELETE triggers

        A DELETE trigger specifically runs when rows are deleted, allowing automatic actions during that event.
      3. Final Answer:

        To automatically run code when rows are deleted from a table -> Option C
      4. Quick Check:

        DELETE trigger = runs on row deletion [OK]
      Hint: DELETE triggers run code automatically on row deletions [OK]
      Common Mistakes:
      • Confusing DELETE triggers with INSERT triggers
      • Thinking DELETE triggers prevent deletion by default
      • Assuming DELETE triggers update rows instead
      2. Which of the following is the correct syntax to create a trigger that runs before a row is deleted from a table named Employees?
      easy
      A. CREATE TRIGGER before_delete_employee DELETE ON Employees FOR EACH ROW BEGIN --code END;
      B. CREATE TRIGGER before_delete_employee AFTER DELETE ON Employees FOR EACH ROW BEGIN --code END;
      C. CREATE TRIGGER before_delete_employee ON Employees BEFORE DELETE FOR EACH ROW BEGIN --code END;
      D. CREATE TRIGGER before_delete_employee BEFORE DELETE ON Employees FOR EACH ROW BEGIN --code END;

      Solution

      1. Step 1: Identify correct trigger timing syntax

        The syntax for a BEFORE DELETE trigger includes 'BEFORE DELETE ON TableName'.
      2. Step 2: Check full syntax correctness

        CREATE TRIGGER before_delete_employee BEFORE DELETE ON Employees FOR EACH ROW BEGIN --code END; correctly uses 'CREATE TRIGGER name BEFORE DELETE ON Employees FOR EACH ROW BEGIN ... END;'. Others misuse order or keywords.
      3. Final Answer:

        CREATE TRIGGER before_delete_employee BEFORE DELETE ON Employees FOR EACH ROW BEGIN --code END; -> Option D
      4. Quick Check:

        BEFORE DELETE ON Table = correct syntax [OK]
      Hint: Use BEFORE DELETE ON table for pre-delete triggers [OK]
      Common Mistakes:
      • Placing BEFORE DELETE after ON table
      • Omitting FOR EACH ROW clause
      • Using DELETE ON instead of BEFORE DELETE ON
      3. Given the following trigger and table data, what will be the output after deleting the row with id = 2 from Orders?
      CREATE TRIGGER log_delete AFTER DELETE ON Orders
      FOR EACH ROW
      BEGIN
        INSERT INTO DeletedOrdersLog(order_id, deleted_at) VALUES (OLD.id, CURRENT_TIMESTAMP);
      END;
      
      -- Initial Orders table:
      -- id | product
      -- 1  | Book
      -- 2  | Pen
      -- 3  | Notebook
      
      -- DeletedOrdersLog is initially empty.
      medium
      A. A new row with order_id = 2 is inserted into DeletedOrdersLog
      B. The row with id = 2 is restored in Orders
      C. No changes happen to DeletedOrdersLog
      D. An error occurs because OLD.id is invalid

      Solution

      1. Step 1: Understand AFTER DELETE trigger behavior

        The trigger runs after a row is deleted from Orders, so OLD.id refers to the deleted row's id.
      2. Step 2: Analyze trigger action

        The trigger inserts a new row into DeletedOrdersLog with order_id = OLD.id (2) and current timestamp.
      3. Final Answer:

        A new row with order_id = 2 is inserted into DeletedOrdersLog -> Option A
      4. Quick Check:

        AFTER DELETE inserts log row with OLD.id [OK]
      Hint: AFTER DELETE triggers can log deleted row info using OLD [OK]
      Common Mistakes:
      • Thinking OLD.id is not accessible in DELETE triggers
      • Assuming trigger restores deleted rows
      • Believing no action happens after delete
      4. Consider this trigger code snippet intended to prevent deletion of rows from Users table if the user is an admin:
      CREATE TRIGGER prevent_admin_delete BEFORE DELETE ON Users
      FOR EACH ROW
      BEGIN
        IF OLD.role = 'admin' THEN
          SIGNAL SQLSTATE '45000' MESSAGE_TEXT = 'Cannot delete admin user';
        END IF;
      END;
      What is the main issue if this trigger does not prevent admin deletions?
      medium
      A. The SIGNAL statement syntax is incorrect
      B. The condition should check NEW.role instead of OLD.role
      C. The trigger does not specify FOR EACH ROW
      D. The trigger should be AFTER DELETE, not BEFORE DELETE

      Solution

      1. Step 1: Check trigger timing and row context

        BEFORE DELETE and FOR EACH ROW are correctly used to check OLD.role before deletion.
      2. Step 2: Verify SIGNAL syntax

        In standard SQL, SIGNAL syntax requires correct SQLSTATE and message format. If syntax is wrong, error won't raise and deletion proceeds.
      3. Final Answer:

        The SIGNAL statement syntax is incorrect -> Option A
      4. Quick Check:

        SIGNAL syntax error prevents trigger from blocking delete [OK]
      Hint: Check SIGNAL syntax carefully to block deletes [OK]
      Common Mistakes:
      • Using AFTER DELETE instead of BEFORE DELETE
      • Checking NEW instead of OLD in DELETE triggers
      • Omitting FOR EACH ROW clause
      5. You want to create a DELETE trigger on a Products table that archives deleted rows into an ArchivedProducts table, but only if the product price is above 100. Which trigger definition correctly implements this logic?
      hard
      A. CREATE TRIGGER archive_expensive_product BEFORE DELETE ON Products FOR EACH ROW BEGIN IF NEW.price > 100 THEN INSERT INTO ArchivedProducts (id, price) VALUES (NEW.id, NEW.price); END IF; END;
      B. CREATE TRIGGER archive_expensive_product AFTER DELETE ON Products FOR EACH ROW BEGIN IF OLD.price > 100 THEN INSERT INTO ArchivedProducts (id, price) VALUES (OLD.id, OLD.price); END IF; END;
      C. CREATE TRIGGER archive_expensive_product AFTER DELETE ON Products FOR EACH ROW BEGIN IF NEW.price > 100 THEN INSERT INTO ArchivedProducts (id, price) VALUES (OLD.id, OLD.price); END IF; END;
      D. CREATE TRIGGER archive_expensive_product BEFORE DELETE ON Products FOR EACH ROW BEGIN IF NEW.price > 100 THEN INSERT INTO ArchivedProducts (id, price) VALUES (OLD.id, OLD.price); END IF; END;

      Solution

      1. Step 1: Choose correct timing and row reference

        AFTER DELETE triggers run after deletion; OLD refers to deleted row data. BEFORE DELETE can also work but OLD is preferred after deletion.
      2. Step 2: Check condition and insert logic

        Condition must check OLD.price > 100. Insert must use OLD column values to archive deleted row data.
      3. Step 3: Validate options

        CREATE TRIGGER archive_expensive_product AFTER DELETE ON Products FOR EACH ROW BEGIN IF OLD.price > 100 THEN INSERT INTO ArchivedProducts (id, price) VALUES (OLD.id, OLD.price); END IF; END; uses AFTER DELETE, OLD.price, and inserts OLD.id, OLD.price correctly. Others use NEW or wrong timing.
      4. Final Answer:

        CREATE TRIGGER archive_expensive_product AFTER DELETE ON Products FOR EACH ROW BEGIN IF OLD.price > 100 THEN INSERT INTO ArchivedProducts (id, price) VALUES (OLD.id, OLD.price); END IF; END; -> Option B
      5. Quick Check:

        AFTER DELETE + OLD.price condition + insert OLD columns = correct [OK]
      Hint: Use AFTER DELETE and OLD to archive deleted rows conditionally [OK]
      Common Mistakes:
      • Using NEW instead of OLD in DELETE triggers
      • Placing condition on NEW.price which is invalid
      • Using BEFORE DELETE but referencing OLD incorrectly
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard