2011-11-19 104 views
46

SEE:Update timestamp column in Application or Database?MySQL工作臺:如何設置「ON UPDATE」?和CURRENT_TIMESTAMP?

我試圖在Workbench中建立類似的模型,但我不知道在哪裏設置「ON UPDATE」部分。我可以得到的最好的是:

-- ----------------------------------------------------- 
-- Table `foo`.`test` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `foo`.`test` ; 

CREATE TABLE IF NOT EXISTS `foo`.`test` (
    `test_id` INT NOT NULL , 
    `date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , 
    `date_updated` TIMESTAMP NOT NULL DEFAULT 0 , 
    PRIMARY KEY (`test_id`)) 
ENGINE = InnoDB; 

我在哪裏可以在Workbench中設置此ON UPDATE部分?

此外,我有一個規則,所有時間戳存儲在數據庫應該是UTC。如何製作CURRENT_TIMESTAMP,NOW等等是UTC?

+0

任何有興趣,我創建了一個[工作臺腳本](HTTPS://gist.github。 com/pepijnolivier/61ba3d69af2884ef2d6fa107d657e2d5),它會自動添加所有表上的時間戳列 - 除了數據透視表 –

回答

91

我正在使用MySQL Workbench 5.2.35。打開創建/更改表格面板,切換到列選項卡,右鍵單擊時間戳字段;在那裏您可以看到可能的defaulton update選項。

重要注意事項:您可以使用CURRENT_TIMESTAMP作爲表格中單個列的默認值或更新值!

Sample screenshot showing the context menu

關於UTC的問題,你可以看看這個question。那裏有一個公認的解決方案。

我建議你閱讀MySQL參考手冊以及Timestamp data typeNOW() function

+0

好的,這對我很有用。如果我想知道某個記錄何時被軟刪除,我只需創建一個date_deleted並從應用程序層設置它,對吧?此外,有關UTC問題的任何想法? – StackOverflowNewbie

+0

是的,如果您已經在運行一個查詢以將某個項標記爲軟刪除,那麼最好從應用程序層更新日期以及在同一個查詢中(或至少同一個事務)。我更新了UTC問題的答案。 – melihcelik

+0

它可以在多個領域完成嗎? – carbonr

-1

默認情況下,MySQL將第一個timestamp字段設置爲CURRENT_TIMESTAMP,每個UPDATEINSERT語句。我以某種方式去設計我的架構,以便updated_at是第一個timestamp字段,這樣我就不必明確指定它。

3

這是我做的MySQL工作臺

數據類型:TIMESTAMP 默認:CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

相關問題