更新同一個表的MySQL 觸發器解決方法
MySQL 本質上限制觸發器更新它們分配到的同一表中的行,從而防止遞歸呼叫。儘管存在此限制,仍然存在可行的解決方法。
建議的解決方法
不要直接更新觸發器中的行,而是利用執行所需邏輯的儲存程序。此方法將行更新任務與觸發器分離,並允許您規避限制。
範例
考慮以下場景:
<code class="sql">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;</code>
在上面的範例中,當一筆新記錄插入Products 表中時,觸發器my_trigger 呼叫預存程序insert_attribute 在MyTable 中插入一行,有效模仿了觸發器內直接行更新的功能。
其他注意事項
雖然此解決方法可作為功能解決方案,但值得注意的是,它在性能和可維護性方面與傳統觸發器不同。與直接觸發器更新相比,預存程序會為資料庫系統帶來額外的開銷和複雜性。
以上是如何在 MySQL 觸發器中更新同一個表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!