Bird
Raised Fist0
MySQLquery~10 mins

AFTER INSERT triggers in MySQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - AFTER INSERT triggers
New row inserted into table
↓
AFTER INSERT trigger fires
↓
Trigger executes its statements
↓
Trigger completes
↓
Insert operation completes
After a new row is inserted into a table, the AFTER INSERT trigger automatically runs its defined actions before the insert operation finishes.
Execution Sample
MySQL
CREATE TRIGGER log_after_insert
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
  INSERT INTO audit_log (emp_id, action) VALUES (NEW.id, 'inserted');
END;
This trigger logs each new employee inserted into the employees table by adding a record to audit_log.
Execution Table
StepActionTable StateTrigger ActionTrigger Effect
1Insert new employee row (id=101, name='Alice')employees: +1 row (id=101, name='Alice')Trigger fires AFTER INSERTPrepare to insert audit log record
2Trigger inserts audit log row (emp_id=101, action='inserted')audit_log: +1 row (emp_id=101, action='inserted')Trigger executes INSERTAudit log updated
3Trigger completesNo changeTrigger endsInsert operation completes
4Insert operation completesemployees and audit_log updatedNo triggerFinal state committed
💡 Trigger runs after each insert row; stops after executing its statements and insert completes
Variable Tracker
VariableStartAfter Step 1After Step 2Final
NEW.idundefined101101101
NEW.nameundefinedAliceAliceAlice
audit_log rows0011
employees rows0111
Key Moments - 3 Insights
Why does the trigger use NEW.id instead of just id?
The trigger uses NEW.id to refer to the inserted row's id value; this is shown in execution_table step 2 where NEW.id=101 is used to insert into audit_log.
Does the trigger run before or after the row is inserted?
The trigger runs after the row is inserted, as shown in execution_table step 1 where the employee row is added before the trigger fires.
Can the trigger modify the inserted row?
No, AFTER INSERT triggers cannot change the inserted row; they only run after insertion, shown by no changes to employees after trigger execution.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of NEW.id when the trigger inserts into audit_log?
ANULL
Bundefined
C101
D0
💡 Hint
Check execution_table row 2 under 'Trigger Action' and 'Trigger Effect' columns
At which step does the trigger finish its execution?
AStep 2
BStep 3
CStep 1
DStep 4
💡 Hint
Look at execution_table row 3 where it says 'Trigger ends'
If the trigger was BEFORE INSERT instead of AFTER INSERT, when would it run?
ABefore the row is inserted
BAfter the row is inserted
CAfter the trigger completes
DIt would not run
💡 Hint
Compare the concept_flow diagram showing AFTER INSERT timing
Concept Snapshot
AFTER INSERT triggers run automatically after a new row is added.
They can perform actions like logging or updating other tables.
Use NEW.column to access inserted row values.
They cannot modify the inserted row.
Trigger runs once per inserted row after insertion completes.
Full Transcript
An AFTER INSERT trigger in MySQL runs automatically after a new row is inserted into a table. When you insert a row, the trigger fires and executes its statements, such as inserting a log record into another table. The trigger can access the inserted row's data using NEW.column syntax. It cannot change the inserted row itself because it runs after insertion. The insert operation completes only after the trigger finishes. This helps automate tasks like auditing or cascading actions after data is added.

Practice

(1/5)
1. What does an AFTER INSERT trigger do in MySQL?
easy
A. It deletes rows after insertion.
B. It runs before a row is inserted into a table.
C. It runs automatically after a new row is added to a table.
D. It prevents rows from being inserted.

Solution

  1. Step 1: Understand trigger timing

    An AFTER INSERT trigger runs after a new row is successfully inserted into a table.
  2. Step 2: Identify trigger purpose

    This trigger is used to perform actions like logging or updating related tables after insertion.
  3. Final Answer:

    It runs automatically after a new row is added to a table. -> Option C
  4. Quick Check:

    AFTER INSERT trigger = runs after insert [OK]
Hint: AFTER INSERT triggers run only after data is added [OK]
Common Mistakes:
  • Confusing AFTER with BEFORE triggers
  • Thinking triggers delete or block inserts
  • Assuming triggers run before insertion
2. Which of the following is the correct syntax to create an AFTER INSERT trigger in MySQL?
easy
A. CREATE TRIGGER trg AFTER UPDATE ON table_name FOR EACH ROW BEGIN ... END;
B. CREATE TRIGGER trg BEFORE INSERT ON table_name FOR EACH ROW BEGIN ... END;
C. CREATE TRIGGER trg AFTER DELETE ON table_name FOR EACH ROW BEGIN ... END;
D. CREATE TRIGGER trg AFTER INSERT ON table_name FOR EACH ROW BEGIN ... END;

Solution

  1. Step 1: Identify trigger timing and event

    The question asks for an AFTER INSERT trigger, so the syntax must include AFTER INSERT.
  2. Step 2: Match syntax structure

    The correct syntax is CREATE TRIGGER trg AFTER INSERT ON table_name FOR EACH ROW BEGIN ... END;.
  3. Final Answer:

    CREATE TRIGGER trg AFTER INSERT ON table_name FOR EACH ROW BEGIN ... END; -> Option D
  4. Quick Check:

    AFTER INSERT trigger syntax = CREATE TRIGGER trg AFTER INSERT ON table_name FOR EACH ROW BEGIN ... END; [OK]
Hint: AFTER INSERT triggers use 'AFTER INSERT' in syntax [OK]
Common Mistakes:
  • Using BEFORE instead of AFTER
  • Using wrong event like UPDATE or DELETE
  • Omitting FOR EACH ROW clause
3. Given this trigger and table:
CREATE TABLE users (id INT, name VARCHAR(20));
CREATE TABLE logs (msg VARCHAR(50));
DELIMITER $$
CREATE TRIGGER after_user_insert AFTER INSERT ON users
FOR EACH ROW BEGIN
  INSERT INTO logs VALUES (CONCAT('User ', NEW.name, ' added'));
END$$
DELIMITER ;

INSERT INTO users VALUES (1, 'Alice');
SELECT * FROM logs;

What will the SELECT query return?
medium
A. [{"msg": "User Alice added"}]
B. [{"msg": "User 1 added"}]
C. Empty result set
D. Syntax error

Solution

  1. Step 1: Understand trigger action on insert

    The trigger inserts a log message using NEW.name after a user is added.
  2. Step 2: Check inserted data and log content

    Inserting (1, 'Alice') triggers log insertion with message 'User Alice added'.
  3. Final Answer:

    [{"msg": "User Alice added"}] -> Option A
  4. Quick Check:

    NEW.name = 'Alice' logged [OK]
Hint: NEW accesses inserted row data inside AFTER INSERT [OK]
Common Mistakes:
  • Using NEW.id instead of NEW.name for message
  • Expecting no logs created
  • Confusing syntax causing errors
4. You wrote this trigger but get an error:
CREATE TRIGGER trg AFTER INSERT ON users
FOR EACH ROW
INSERT INTO logs VALUES ('New user added');
INSERT INTO logs VALUES ('Trigger fired');

What is the problem?
medium
A. Missing BEGIN and END block for multiple statements
B. AFTER INSERT triggers cannot insert into other tables
C. FOR EACH ROW is not allowed in AFTER triggers
D. Trigger name cannot be 'trg'

Solution

  1. Step 1: Check trigger body syntax

    When a trigger has more than one statement or uses procedural code, it needs BEGIN ... END block.
  2. Step 2: Identify missing block

    The trigger has multiple statements but lacks BEGIN ... END, which is required for clarity and to avoid errors.
  3. Final Answer:

    Missing BEGIN and END block for multiple statements -> Option A
  4. Quick Check:

    Triggers need BEGIN...END for statements [OK]
Hint: Always use BEGIN...END for trigger statements [OK]
Common Mistakes:
  • Assuming single statement triggers don't need BEGIN...END
  • Thinking AFTER triggers can't modify other tables
  • Misunderstanding FOR EACH ROW usage
5. You want to create an AFTER INSERT trigger on a sales table that updates a summary table with the total sales amount. Which approach is correct?
hard
A. Use OLD.amount in the trigger to subtract from the summary table's total.
B. Use NEW.amount in the trigger to add to the summary table's total after each insert.
C. Use a BEFORE INSERT trigger to update the summary table before inserting sales.
D. Use a DELETE trigger to update the summary table after sales are removed.

Solution

  1. Step 1: Identify correct trigger timing for updating after insert

    AFTER INSERT triggers run after new rows are added, so they can safely update summary data using inserted values.
  2. Step 2: Use NEW to access inserted row data

    Inside the trigger, NEW.amount gives the inserted sale amount to add to the summary.
  3. Final Answer:

    Use NEW.amount in the trigger to add to the summary table's total after each insert. -> Option B
  4. Quick Check:

    AFTER INSERT + NEW = update summary correctly [OK]
Hint: Use NEW in AFTER INSERT to access inserted data [OK]
Common Mistakes:
  • Using OLD in INSERT triggers (OLD is NULL)
  • Using BEFORE INSERT instead of AFTER INSERT
  • Using DELETE triggers for insert updates
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