MySQL Workbench:如何设置“ON UPDATE”和 CURRENT_TIMESTAMP?
Posted
技术标签:
【中文标题】MySQL Workbench:如何设置“ON UPDATE”和 CURRENT_TIMESTAMP?【英文标题】:MySQL Workbench: how do I set up "ON UPDATE" and CURRENT_TIMESTAMP? 【发布时间】:2012-01-01 21:50:09 【问题描述】:查看:Update timestamp column in Application or Database?
我正在尝试在 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?
【问题讨论】:
对于任何感兴趣的人,我创建了一个Workbench script,它会自动在所有表上添加时间戳列 - 除了数据透视表 【参考方案1】:我正在使用 mysql Workbench 5.2.35。打开创建/更改表面板,切换到列选项卡,右键单击时间戳字段;在那里你可以看到可能的default
和on update
选项。
重要提示:您可以使用CURRENT_TIMESTAMP
作为表中单个列的默认值或更新值!
关于 UTC 问题,你可以看看这个question。那里有一个公认的解决方案。
我建议您阅读 MySQL 参考手册以及 Timestamp data type 和 NOW()
function。
【讨论】:
好的,这对我有用。如果我想知道记录何时被软删除,我只需创建一个 date_deleted 并从应用程序层设置它,对吗?另外,对 UTC 问题有任何想法吗? 是的,如果您已经在运行查询以将项目标记为软删除,那么最好在同一查询(或至少同一事务)中从应用程序层更新日期。我更新了 UTC 问题的答案。 @carbonr 您是否阅读了答案上的“重要说明”,这是您要问的还是您要问的其他问题? 感谢您的回答!为我工作 一个小附录:对我来说,我必须指定 Not NullNN
才能从 UI 自动更新(Workbench 6.0.8)【参考方案2】:
这是我使用 MySQL Workbench 所做的事情
数据类型:TIMESTAMP 默认值:CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
【讨论】:
【参考方案3】:默认情况下,MySQL 在每个 UPDATE
或 INSERT
语句中将第一个 timestamp
字段设置为 CURRENT_TIMESTAMP
。我开始以某种方式设计我的架构,以便 updated_at
是第一个 timestamp
字段,这样我就不必明确指定它。
【讨论】:
以上是关于MySQL Workbench:如何设置“ON UPDATE”和 CURRENT_TIMESTAMP?的主要内容,如果未能解决你的问题,请参考以下文章