2012-07-30 95 views
0

我在這裏得到了一個任務來記錄數據庫中的更改。在更新/刪除/插入時使用Mysql觸發器

所以我剛剛讀了關於觸發器,這讓我有興趣嘗試一下。

我得到這個數據庫中的表是信息描述了客戶,

(ID fornamn,efternam ..等是列名和信息下面是值)

此表被稱爲「昆德」

id fornamn  efternamn adress ort  postnummer foretag  telefon   email   personNmr husNmr organisationsNmr produkt  uppringd prioritet raderad 
15 Peter  Tressing adress ort  41676  foretag  071234565  [email protected] 123456  4  55658794   Nocria  1   0   0 

我稱這個表kunder_log

id fornamn  efternamn adress ort  postnummer foretag  telefon   email   personNmr husNmr organisationsNmr produkt  uppringd prioritet raderad  timestamp type 

(唯一diffirance是指數的,而不是對ID主鍵和我添加的時間戳和類型)

(鍵入查詢(插入件的類型,刪除或更新))

現在我想當我執行更新/插入/刪除查詢時,觸發表中每一行的更改。

但我只想插入所做的更改,而不是舊錶中的每一列。

這是可能的還是你建議另一種方法?

+0

所以你說你只是想在觸發器來顯示更改後的列? – 2012-07-30 09:34:12

+0

Scott S:是的,我是 – oBo 2012-07-30 09:35:03

+0

好的,因爲它聽起來有點像你想**將某處的更改插入到另一個表中。 – 2012-07-30 09:37:33

回答

0

基本上有登錄主表所做的所有更改兩種方法:

  1. 觸發是不錯的選擇,如果你想登錄到表進行全球範圍內的所有變化。

  2. 在插入,更新,刪除所有存儲過程中的語句後,將插入寫入更改日誌表中。

我通常更喜歡第二種方法,因爲它比觸發器快得多。

樣本表結構:

kunder 
    all_columns 

kunder_log 
    change_log_id INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    all_columns 
    change_type ENUM('INSERT','UPDATE','DELETE'), 
    change_time TIMESTAMP NOT NULL DEFAULT 0, 
    change_description VARCHAR(1024) 
+0

我想避免第二種選擇,但也許我必須去那個。 – oBo 2012-07-30 09:40:48

+0

好吧,那麼你可以用第一種方法,因爲它是實現它的簡單方法。你只需要在表上寫入觸發器來進行插入,更新和刪除操作。 – Omesh 2012-07-30 09:43:54