插入後更新同一個表的觸發器:另一種方法
問題概述
您尋求在ACCOUNTS 表上實作一個觸發器,該觸發器根據edit_on值更新同一表中的列新插入的行。但是,由於限制在呼叫它的觸發器內更新相同表,您會遇到錯誤。
替代解決方法:預存程序
要規避此限制,可以使用預存程序在單一交易中執行插入和更新操作。這種方法允許手動提交更改,從而實現所需的更新。
預存程序實作
以下是實現您的目標的範例預存程序:
DELIMITER $$ CREATE PROCEDURE InsertAndEditStatus(IN new_pk BIGINT) BEGIN -- Insert new row into ACCOUNTS INSERT INTO ACCOUNTS (pk, user_id, edit_on, status) VALUES (new_pk, /* user_id */, NULL, 'A'); -- Update existing row in ACCOUNTS UPDATE ACCOUNTS SET status='E' WHERE pk = NEW.edit_on; -- Commit transaction COMMIT; END$$ DELIMITER ;
用法
使用此儲存的過程,以新插入行的主鍵作為參數呼叫它:
CALL InsertAndEditStatus(2147483726);
此過程將插入具有指定主鍵和預設值的新行,然後更新由新插入的行中的edit_on 列表示它已被編輯。
以上是如何在插入後更新同一個表而不發生觸發錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!