首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 觸發器中更新當前行報錯解決:AFTER 觸發器不可更新 NEW,需移至 BEFORE

     編輯:MySQL 綜合教學

MySQL 觸發器中更新當前行報錯解決:AFTER 觸發器不可更新 NEW,需移至 BEFORE

編寫觸發器時嘗試在 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 觸發器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved