2010-01-11 24 views
6

我將DATETIME類型的列tsu(時間戳更新)添加到我的許多表中。MySQL'Update Timestamp'列 - 觸發器

我需要編寫BEFORE UPDATE觸發器,它會將列更新爲CURRENT_TIMESTAMP(),但我無法正確理解。試過:

DELIMITER $$ 
CREATE 
    TRIGGER `cams`.`tsu_update_csi` BEFORE UPDATE 
    ON `cams`.`csi` 
    FOR EACH ROW BEGIN 
     UPDATE csi SET tsu = CURRENT_TIMESTAMP WHERE csi_code = OLD.csi_code; 
    END$$ 
DELIMITER ; 

任何人都可以指出我在正確的方向嗎? MTIA

+0

你或許應該提到的是你已經有了類TIMESTAMP的列與CURRENT_TIMESTAMP的默認問題,存儲記錄的創建時間。 – 2010-01-12 18:01:21

+0

你是對的伊恩。我之前並不瞭解多個TIMESTAMP列的含義。謝謝你的幫助。 – maxhugen 2010-01-12 22:57:17

回答

14

好了,試試這個:

DELIMITER $$ CREATE 
    TRIGGER `cams`.`tsu_update_csi` BEFORE UPDATE 
    ON `cams`.`csi` 
     FOR EACH ROW BEGIN 
     SET NEW.tsu = CURRENT_TIMESTAMP; 
END$$ DELIMITER ; 
+0

謝謝,那個例子就是我需要的!現在瞭解TIMESTAMP好得多了。 – maxhugen 2010-01-12 22:55:37

7

如果該字段可以被定義爲一個時間戳,您可以使用以下命令:

ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
       ON UPDATE CURRENT_TIMESTAMP); 
+0

不,我不能這樣做,如果我保留原始'ts'列: 'ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP' – maxhugen 2010-01-12 04:11:03

1

不知道它會爲你工作,但你總是可以使它是一個沒有默認值的TIMESTAMP字段 - MySQL將自動將表中定義的第一個這樣的字段的值設置爲每次更新時的當前時間戳。

+0

謝謝Zerofiz和Ian。我已經有了一個'ts'列,它被設置爲默認CURRENT_TIMESTAMP,因爲它意在表示「創建日期」。從我對TIMESTAMP的閱讀中,不可能在一個ts列上使用CURRENT_TIMESTAMP作爲默認值,而在另一列中更新(這正是我當然想要的)。 我正在檢查客戶端,看看我們是否可以使用現有的'ts'字段作爲「更新日期」,並免除「創建日期」。 – maxhugen 2010-01-12 01:00:48