更新同一個表的MySQL 觸發器解決方法
MySQL 本質上限制觸發器更新它們分配到的同一個表中的行,從而防止遞歸呼叫。儘管存在此限制,仍然存在可行的解決方法。
建議的解決方法
不要直接更新觸發器中的行,而是利用執行所需邏輯的儲存程序。此方法將行更新任務與觸發器分離,並允許您規避限制。
範例
考慮以下場景:
CREATE TABLE MyTable (
id INT PRIMARY KEY,
attribute VARCHAR(255)
);
-- Trigger to insert a row into MyTable for each new parent product record
CREATE TRIGGER my_trigger AFTER INSERT ON Products
FOR EACH ROW
BEGIN
-- Issue SQL statement to call a stored procedure that performs the insert
CALL insert_attribute(NEW.id, 'Value');
END;
在上面的範例中,當一筆新記錄插入到 Products 表中時,觸發器 my_trigger 呼叫預存程序 insert_attribute 在 MyTable 中插入一行,有效地模仿了直接行更新的功能觸發器。
其他注意事項
雖然此解決方法可作為功能解決方案,但它很重要需要注意的是,它在性能和可維護性方面與傳統觸發器不同。與直接觸發器更新相比,預存程序會為資料庫系統帶來額外的開銷和複雜性。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3