【问题标题】:MySQL Workbench: how do I set up "ON UPDATE" and CURRENT_TIMESTAMP?MySQL Workbench:如何设置“ON UPDATE”和 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,它会自动在所有表上添加时间戳列 - 除了数据透视表

标签: mysql timestamp utc mysql-workbench


【解决方案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 Null NN 才能从 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 字段,这样我就不必明确指定它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-29
      • 2011-07-31
      • 2016-05-30
      • 2017-04-26
      • 2016-10-23
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多