2010-12-23 61 views
2

我需要確認這是正確的。我的要求是所有的表格都需要3個柱子:
1)創建日期行
2)日期行最後更新
3)標記行是否激活。datetme,mysql中的時間戳字段

所以我在每一個表
is_active TINYINT(1)NOT NULL DEFAULT '1',
created的datetime NOT NULL,
updated時間戳DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

我認爲有這3個colunms我不必做任何事情,這些專欄可以照顧好自己嗎?當表創建時,is_active將始終默認爲1,所以我不必碰任何東西(只需要稍後手動將這些值設置爲0,如果我想將行顯示爲不活動)。日期時間將始終自動設置當前日期&行自己創建的時間,我假設?當行更新時,時間戳會自動更新。

我是否缺少一些我需要添加的東西,如觸發器或任何東西,或者這是好的嗎?

+0

我認爲很好,你覆蓋了所有要求 – 2010-12-23 09:11:23

回答

1

您沒有發佈任何內容,表示created datetime列將自動設置。它沒有默認值 - 您需要爲它提供一個值。

你可以使它成爲一個時間戳,並給它DEFAULT CURRENT_TIMESTAMP,但後來你遇到了另一個問題 - 根據MySQL docs,你只能用神奇DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP標誌的第一 TIMESTAMP列在一張桌子裏。

您可以在插入時自己爲該列提供一個值,例如NOW(),也可以設置觸發器插入該表中,以便爲您設置該值。

+0

那麼整個問題就是自動化這些列,所以沒有人需要明確指定日期/時間。做得越好的工作越少。我猜觸發器可能會減慢表,如果數據庫不得不等待,並在插入記錄特別是largee表之前,所以Now()似乎是一個更好的選擇使用?我需要將其更改爲:created datetime Now()NOT NULL? – Tony38 2010-12-23 09:39:44

相關問題