2011-11-19 31 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

相关问题