2009-09-03 45 views
0

刪除的記錄與觸發我試圖建立了一系列的歷史觸發自動收集歷史通過觸發器給定表的用戶的USER_ID。我想使用觸發器,因爲這可以保證我捕獲所有更改,無論有人忘記將其保存在應用程序中。我的問題是我有這個觸發器。保存在MySQL的

CREATE TRIGGER `db`.`delete_history_trigger` BEFORE DELETE ON `db`.`payments` 
    FOR EACH ROW BEGIN 
      INSERT INTO `payments_history` select *, 'delete', NOW(), USER() from `payments` where `PAYMENT_ID` = OLD.`PAYMENT_ID`; 
    END 
// 

這東西一切都在paymentspayments_history並填寫已執行的動作,日期/時間發生的動作,要執行導致該操作的MySQL用戶。在我的應用程序每個用戶都有一個USER_ID(這是從users表),我想保存。對於更新,這是沒有問題USER_IDupdate查詢中使用的一個領域。但是,在刪除中沒有傳入數據,因此NEW不可訪問,因爲沒有任何數據。我想不出一個好辦法讓USER_ID保存到歷史表上刪除短做第二次查詢以更新記錄。因爲它是可能,我寧可不使用此解決方案,其他人可能忘記調用方法實施後的刪除和數據會丟失更新的記錄。

回答

1

設置會話變量user_ID的和有觸發中止如果USER_ID會話變量並沒有在它的值USER_ID的刪除。

查詢設置USER_ID在MySQL會話:

SET @user_id = <value of user_id> 

新刪除:

CREATE TRIGGER `db`.`delete_history_trigger` BEFORE DELETE ON `db`.`payments` 
    FOR EACH ROW BEGIN 
     INSERT INTO `payments_history` select *, 'delete', NOW(), USER(), @user_id from `payments` where `PAYMENT_ID` = OLD.`PAYMENT_ID`; 
    END 
// 
+0

所以像,SET @USER_ID = <無論uid是>? – baudtack 2009-09-03 16:36:00