2008-09-30 131 views
21

是否有可能在MySQL表中定義一個時間戳列,每當同一行中的某個字段被修改時它將自動更新?理想情況下,此列最初應設置爲插入行的時間。mysql時間戳列

乾杯, 唐

回答

16

這是timestamp柱類型的默認功能。但是,請注意,此類型的格式爲yyyymmddhhmmss(全數字,無冒號或其他分隔)。

編輯:以上關於格式的註釋是唯一真正的MySQL < 4.1版本......後來的版本格式化它像一個日期時間

+3

根據MySQL 5.0文檔,時間戳類型與日期時間格式相同(例如'YYYY-MM-DD HH:MM:SS')。 – 2008-09-30 20:58:41

0

IIRC,在timestamp類型的表中的第一列在創建記錄時不可更改時設置。類型時間戳的第二列在記錄更新時設置。或相反亦然。

我沒有做太多的MySQL工作,所以你要驗證這一點。

31

您可以像提到的其他海報一樣使用時間戳列。下面是SQL你可以用它來在添加列:

ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ; 

這增加了一個名爲「LASTUPDATED」與當前的日期/時間的默認值列。當記錄更新時(可以說5分鐘後)時間戳會自動更新到當前時間。

+6

以下看起來已足夠: ALTER TABLE`table1` ADD`lastUpdated` TIMESTAMP; – 2008-10-02 14:44:14

0

MySQL時間戳只有在其默認值被設置爲創建或更新時間時纔會設置。 ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP
否則它就像DateTime字段一樣工作,只是它相對於1970/01/01 UTC,所以它是絕對時間點,不像DateTime那樣依賴於特定的時區。

1

這是我所觀察到的東西(的MySQL 5.7.11) -

在表中的第一個TIMESTAMP列獲取當前時間戳作爲缺省值。因此,如果您在不提供值的情況下執行INSERT或UPDATE,則該列將獲取當前時間戳。

任何後續的TIMESTAMP列都應該有明確定義的默認值。如果您有兩個TIMESTAMP列,並且您沒有爲第二列指定默認值,則在嘗試創建表格時會出現此錯誤 -

錯誤1067(42000):'COLUMN_NAME'的默認值無效