MySQL 中的觸發器限制:更新同一個表
MySQL 觸發器提供了一個基於資料庫事件執行自動操作的機制資料庫。但是,使用觸發器更新事件發起的相同表存在一些限制。這是由於限制觸發器無法修改呼叫觸發器的語句已在使用的表。
問題陳述
在提供的場景中,任務是在將新行插入到 ACCOUNTS 表中時更新 ACCOUNTS 表中的特定行。但是,更新必須在主鍵 (pk) 與新行的 edit_on 值相符的現有行上執行。
觸發器實現
建議的觸發器語法旨在實現此要求:
DELIMITER $$ DROP TRIGGER IF EXISTS `setEditStatus`$$ CREATE TRIGGER `setEditStatus` AFTER INSERT on ACCOUNTS FOR EACH ROW BEGIN update ACCOUNTS set status='E' where ACCOUNTS.pk = NEW.edit_on ; END$$ DELIMITER ;
執行錯誤
不幸的是,由於前面提到的限制,執行此觸發器會導致錯誤:「無法更新表ACCOUNTS ... 已被呼叫此觸發器的語句使用。一種方法是建立預存程序。預存程序允許在單一事務中執行多個操作,包括插入 ACCOUNTS 表和更新現有行。
以下是完成該任務的範例預存程序:
透過使用新插入行的ID呼叫儲存過程,插入和更新操作都可以在單一事務中執行,繞過觸發器限制。以上是如何在 INSERT 操作後更新 MySQL 觸發器中的相同表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!