Introduction
AFTER UPDATE triggers run automatically after a row in a table is changed. They help you do extra tasks right after data updates.
CREATE TRIGGER trigger_name AFTER UPDATE ON table_name FOR EACH ROW BEGIN -- statements to run after update END;
CREATE TRIGGER log_update AFTER UPDATE ON employees FOR EACH ROW BEGIN INSERT INTO audit_log(employee_id, changed_at) VALUES (NEW.id, NOW()); END;
CREATE TRIGGER update_salary_history AFTER UPDATE ON salaries FOR EACH ROW BEGIN INSERT INTO salary_history(employee_id, old_salary, new_salary, changed_on) VALUES (OLD.employee_id, OLD.salary, NEW.salary, NOW()); END;
CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(50), price DECIMAL(10,2) ); CREATE TABLE price_changes ( product_id INT, old_price DECIMAL(10,2), new_price DECIMAL(10,2), changed_at DATETIME ); DELIMITER $$ CREATE TRIGGER after_product_update AFTER UPDATE ON products FOR EACH ROW BEGIN INSERT INTO price_changes(product_id, old_price, new_price, changed_at) VALUES (OLD.id, OLD.price, NEW.price, NOW()); END$$ DELIMITER ; INSERT INTO products VALUES (1, 'Pen', 1.00); UPDATE products SET price = 1.20 WHERE id = 1; SELECT * FROM price_changes;
AFTER UPDATE trigger in MySQL?AFTER UPDATE trigger runs after a row in a table is updated.AFTER UPDATE trigger on a table named employees?employees table.CREATE TRIGGER trg AFTER UPDATE ON employees FOR EACH ROW BEGIN END;products:
CREATE TRIGGER trg_after_update AFTER UPDATE ON products FOR EACH ROW BEGIN INSERT INTO audit_log (product_id, old_price, new_price) VALUES (OLD.id, OLD.price, NEW.price); END;What happens when a product's price is updated?
audit_log after a product update.OLD.id, OLD.price, and NEW.price to log price changes.CREATE TRIGGER trg AFTER UPDATE ON orders FOR EACH ROW BEGIN SET NEW.status = 'processed'; END;What is the problem?
users. Which trigger code correctly updates a email_update_count column after each email change?OLD.email != NEW.email.email_update_count in the same row, use a BEFORE UPDATE trigger and set NEW.email_update_count.CREATE TRIGGER trg_email_update
BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
IF OLD.email != NEW.email THEN
SET NEW.email_update_count = OLD.email_update_count + 1;
END IF;
END; correctly uses BEFORE UPDATE, compares emails, and sets NEW value. CREATE TRIGGER trg_email_update
AFTER UPDATE ON users
FOR EACH ROW
BEGIN
IF OLD.email != NEW.email THEN
UPDATE users SET email_update_count = email_update_count + 1 WHERE id = NEW.id;
END IF;
END; tries to update the same table in AFTER UPDATE, causing recursion. CREATE TRIGGER trg_email_update AFTER UPDATE ON users FOR EACH ROW BEGIN SET NEW.email_update_count = OLD.email_update_count + 1; END;tries to set NEW in AFTER UPDATE (not allowed).
CREATE TRIGGER trg_email_update
AFTER UPDATE ON users
FOR EACH ROW
BEGIN
IF OLD.email = NEW.email THEN
UPDATE users SET email_update_count = email_update_count + 1 WHERE id = NEW.id;
END IF;
END; updates count when emails are equal (wrong logic).Pass the test and this pattern moves unknown