首頁 > 資料庫 > mysql教程 > 如何在插入後更新同一個表而不發生觸發錯誤?

如何在插入後更新同一個表而不發生觸發錯誤?

Barbara Streisand
發布: 2024-12-10 22:22:10
原創
750 人瀏覽過

How Can I Update the Same Table After an Insert Without Trigger Errors?

插入後更新同一個表的觸發器:另一種方法

問題概述

您尋求在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板