編寫觸發器時嘗試在 AFTER 觸發器中更新 NEW 行報錯:
ERROR: Updating of NEW row is not allowed in after trigger
將更新邏輯移至 BEFORE 觸發器中:
CREATE TRIGGER trg_before_update BEFORE UPDATE ON tbl
FOR EACH ROW
BEGIN
SET NEW.updated_at = NOW(); -- 允許修改 NEW
IF NEW.status = 'active' THEN
SET NEW.last_active = NOW();
END IF;
END;
BEFORE 觸發器執行時行數據尚未寫入存儲引擎,NEW 可修改AFTER 觸發器執行時行已持久化,NEW 為只讀,僅供讀取或插入其他表需修改當前行數據時,必須使用 BEFORE 觸發器。