2016-04-25 175 views
1

在MySQL中創建數據庫表。我創建了兩個字段來獲取時間戳。sql中的數據庫時間戳

created_at   timestamp default '0000-00-00 00:00:00', 
updated_at   timestamp default now() on update now(), 

當我更新數據庫時,兩個字段都更新爲當前時間戳。有關如何防止這種情況發生的任何想法?我在更新時不提供'created_at'字段 - 我還爲updated_at字段提供'null'來自動更新。

+0

我無法複製它。什麼版本的MySQL? – Barmar

+0

我相信mysql v5.6.4 - 試圖確認。 –

+0

查看https://dev.mysql.com/doc/refman/5.6/en/upgrading-from-previous-series.html – Barmar

回答

0

取決於MySQL版本,你應該能夠使用默認值以下的的updated_at領域:在UPDATE CURRENT_TIMESTAMP

你created_at領域

CURRENT_TIMESTAMP應該只是CURRENT_TIMESTAMP爲默認值。

我也將設置爲數據類型日期時間而不是時間戳。

+0

中有關時間戳的部分他不希望它默認爲當前時間,他希望它的默認時間爲0. – Barmar

+1

@Barmar - 我看到他的當前聲明沒有created_at的日期時間值,但這是毫無價值的。他需要在創建時將其默認爲當前日期時間值。另一個選項是將數據類型更改爲datetime,默認值爲NULL。 –

+0

@ReubenBrown上面的代碼是我在嘗試使其工作時發現的。我不能有兩個current_timestamp(或now())聲明而不會出現錯誤。我真的很喜歡這是一個自動的事情 - 不希望在創建時提供當前時間戳。 –

0

時間戳初始化可以是一個醜陋的野獸在MySQL!

基於下面你的commment有mysql v5.6.4或更早版本:

我不能宣佈沒有得到一個錯誤二current_timestamps - 儘管它的默認值是0 - 它是生產在創建當前時間戳(沒有我在時間戳餵養) - 斯賓塞羅漢

你可以有被初始化和/或更新,當您插入/更新記錄當前時間戳一個時間戳字段。在早期版本中,這必須是表中的第一個時間戳字段。

我想簡單地設置created_at爲與空的默認值的空的列,因爲根據上timestamp initialization MySQL文檔:

換句話說,定義爲允許NULL值自動初始化TIMESTAMP列僅當其定義包含DEFAULT CURRENT_TIMESTAMP時

通過將默認值更改爲空值,可以避免任何可能出現的問題,您可能會使用零日期和各種sql模式。

created_at   timestamp null default null, 
+0

我不能有兩個current_timestamps聲明沒有得到一個錯誤 - 雖然它的默認值是0 - 它創建時產生一個當前時間戳(沒有我餵給時間戳) –

+1

「我不能有兩個current_timestamps聲明沒有得到一個錯誤「 - 所以你使用的是MySQL v5.6.4或更早版本。我會相應地更新我的答案。儘管我對圍繞着可空性的回答的觀點依然存在。 – Shadow

+0

您的解決方案將值爲NULL –