2013-04-24 85 views
0

我有下面這個觸發器在emplog表中插入新值,我想讓我的觸發器插入描述列中發生的事件,例如,如果我更改了last_name我希望它出現old.lastname更改爲new.last_name,如果它的名字或性別或dob或婚姻或ssn更新它應該做同樣的,即時通訊新手我怎麼能做到這一點讓我說我想要使用concat函數?如何在此觸發器中使用concat功能

CREATE TRIGGER emplog_update AFTER UPDATE ON emp 
FOR EACH ROW 
INSERT INTO emplog VALUES 
(NEW.id,NEW.lastname,NEW.firstname,NEW.gender,NEW.dob,NEW.marital,NEW.SSN,'U',NULL,USER(),('this is where the description will go')); 

回答

0

您可以使用select代替values生成列的列表。

可以使用concat_ws()將字符串連接在一起,方法是使用case語句比較值。以下版本假定列沒有NULL值:

CREATE TRIGGER emplog_update AFTER UPDATE ON emp 
FOR EACH ROW 
INSERT INTO emplog (id, lastnmae, firstname, . . .) 
    select NEW.id,NEW.lastname,NEW.firstname,NEW.gender,NEW.dob,NEW.marital,NEW.SSN,'U',NULL,USER(), 
      concat_ws(',', 
        (case when new.id <> old.id then 'id' end), 
        (case when new.lastname <> old.lastname then 'lastname' end), 
        (case when new.firstname <> old.firstname then 'firstname' end), 
        . . . 
        ); 

作爲一個說明,你應該列出在insert staetment表的列。這是保持代碼可維護性的好實踐,對觸發器尤爲重要。如果有人刪除或重命名列,則觸發器可能會在下次更新時失敗,並帶有難以理解的電子郵件消息。

用所有列的相似代碼替換...

+0

即時獲取此錯誤#1136 - 列計數不匹配第1行的值計數 – cleo 2013-04-24 18:43:21