2014-10-01 75 views
0

我的數據庫有如下表:如何在mysql觸發器中添加修改後的信息?

products 
product_features 
customers 
payments 

還有一個users表誰可以修改,刪除或添加表格上面的任何項目。 然後我試圖存儲所有這些操作,並且我想要啓用或禁用產品或product_features(不僅僅是刪除)。

id_log 
action (delete, update, add) 
id_user 
table_afected (products, product_features, customers, payments) 
id_affected 
enabled 
date_added 
date_modified 

然後,我將使用MySQL觸發器和這種方式來設置用戶:由

,所以我想在創建新表稱爲日誌具有以下字段禁用的項目不會入店 https://stackoverflow.com/a/8621168/2154101

現在假設我想保存正在修改的id_affected的字段。我該怎麼處理呢?

回答

0

如果要保存所有更改(在每個表上修改了哪些字段),那麼數據庫觸發器將是一個好方法。

另一種更靈活的,你可以傳遞參數是讓從應用程序手動插入所有的邏輯和規則,你想

在關於節約的ID,這是一件容易的事。通常所做的是創建一個包含字段(TABLE_NAME,FIELD_NAME,OLD_VALUE,NEW_VALUE,KEY或ID)的表(我們稱之爲LOG)。在這個表格中,您保存了例如('USERS','FIRSTNAME','Johnny','John',234),並且您將知道有人進行了更新,如 更新USERS設置FIRSTNAME ='John',其中ID = 234

OLD_VALUE和NEW_VALUE列可以是VARCHAR類型(或CLOB,如果它們需要支持更大的數據)以存儲任何類型的字段值。

觸發器的好處在於,如果從應用程序進行修改,它們會觸發,並且如果修改是直接從數據庫完成的,則會由DBA執行SQL更改而觸發。

+0

好的,我會使用觸發器。但是最後一個問題呢?我已經更新了這個問題。請檢查出來。 – harrison4 2014-10-02 10:32:24

+0

我更新了我的回覆。看看是否回答你的問題 – Marius 2014-10-02 11:28:22

+0

謝謝!但OLD_VALUE字段的類型是什麼。例如,假設用戶更新日期,並在更新varchar字段之前更新日期。 – harrison4 2014-10-02 11:59:48

0

是的,每次更改都會插入一個新行。

的選擇,如果你倒是想保持的東西,在一排,你可以使用OLD_VALUE併爲NEW_VALUE一個CLOB場,並且有類似

<FIELD_VALUES> 
    <FIELD1>value1</FIELD1> 
    <FIELD2>value2</FIELD2> 
    ... 
</FIELD_VALUES> 

,然後在XML中的應用程序,你可以解析這個XML甚至顯示已修改字段的登錄顏色

作爲一個選項,您可以保存所有字段或只是修改的字段,無論您喜歡什麼。