2014-09-22 85 views
2

我想我的MySQL表包含2時間戳列,既沒有客戶端的幫助自動設置:一個要在插入一次初始化:如何在MySQL表中創建2個自動設置的時間戳列?

`added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

和另一初始化上插入相同的和更新的每更新:

`updated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

但是,這並不以這種方式工作:

[錯誤] 1293 - 不正確的表定義;在DEFAULT或ON UPDATE子句中只能有一個帶CURRENT_TIMESTAMP的TIMESTAMP列

是否有已知的解決方法?

回答

3

解決方法不僅僅是解決方法:升級到MySQL 5.6.5或更高版本,並且支持此功能。

參見:MySQL 5.6.6 TIMESTAMP columns and DEFAULT values

{編輯}由於升級是不是一種選擇,可以使第一列中的正常timestamp列,並創建一個觸發器,當你插入記錄,設置一個時間戳。然後,您可以使用DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP創建另一個柱子,以便在插入和更新時獲得時間戳。

CREATE TRIGGER task_creation_timestamp BEFORE INSERT ON tasks 
FOR EACH ROW 
SET NEW.created = NOW(); 

我從this answer裏偷了這個扳機。

+0

謝謝,但遺憾的是沒有機會,我相信我的共享主機提供商,直到他們來到這個想法本身進行任何更新。無論如何,我都會提出你的答案。 – Ivan 2014-09-22 18:16:30

+0

您也可以使用觸發器。我剛剛給我的回答添加了這個建議,但對於一個例子,你可能會檢查[這個問題](http://stackoverflow.com/questions/2906978/mysql-how-to-create-trigger-for-setting-創建日期換新行)。 – GolezTrol 2014-09-22 18:18:43

1

沒有「解」的錯誤提示,你只能有每桌一個時間戳(論5.6.6如GolezTrol Suggested以前的版本)

要解決這一點,我建議你做了「時間戳」的一個datetime並設置默認爲NOW()CURRENT_TIMESTAMP()any other synonym for NOW()

+0

相同的'TIMESTAMP'數據類型似乎工作得很好,所以我可以看到沒有理由在這裏使用'DATETIME'(是的,我喜歡'DATETIME'通常更好,但就我們已經使用'TIMESTAMP'而言,保持它只是爲了避免併發症)。 – Ivan 2014-09-22 18:36:16