【问题标题】:MySQL Workbench: Add Timestamp FieldsMySQL Workbench:添加时间戳字段
【发布时间】:2021-08-12 10:12:56
【问题描述】:

我使用 MySQL 已经好几年了(能力可能是 3/10?),但我只是出于个人兴趣安装了 MySQL。

我正在尝试在 MySQL Workbench 中添加两个时间戳字段:“已创建”和“已更新” - 这与我模糊记得的内容有所不同。

“created”应该在创建记录时自动插入日期/时间,“updated”应该在记录更新时自动更新字段。

请问如何在 Workbench 中创建这些?

【问题讨论】:

  • 是转换现有的VARCHAR(45) 列还是创建新列?
  • 我正在创建一个新列,并尝试选择 TIMESTAMP(),但 Workbench 不允许,并恢复为默认值(我认为)。
  • 是的,我认为它只是复制了上一列(在这种情况下为type_name)。我在你的定义中找不到任何明显错误的地方。工作台总是充满这些恼人的故障。
  • 奇数。我知道我曾经能够添加一个自动工作的“创建”列,但我认为我必须通过我连接到的程序更新“更新”列 - 尽管我似乎记得一个“ON UPDATE”列设置. 仍在谷歌搜索,但还没有找到任何东西。
  • Workbench 曾经有一个单独的列用于 Initial Value,而不是像现在这样串联。哦,好吧,我会习惯新的布局。不过,错误消息可能会提供更多信息。

标签: mysql mysql-workbench


【解决方案1】:

您需要在括号中设置特定的精度示例:TIMESTAMP(6)

请查看我的截图。

【讨论】:

    【解决方案2】:

    文档很难找到,但TIMESTAMP 列接受一个可选的修饰符来设置fractional seconds

    MySQL 支持 TIME、DATETIME 和 TIMESTAMP 值的小数秒,精度高达微秒(6 位):

    • 要定义包含小数秒部分的列,请使用语法type_name(fsp),其中type_name 是TIMEDATETIMETIMESTAMPfsp 是小数秒精度。

    下拉值包含括号,因此您可以编辑列类型详细信息(因为没有其他 UI)。空括号会在服务器上触发语法错误,Workbench 似乎无法以用户友好的方式处理它们。

    如果您需要小数秒,您必须输入一个值。否则,您需要输入零或完全删除括号;无论哪种情况,生成的 SQL 都是一样的:

    ALTER TABLE `investment`.`security_type` 
    ADD COLUMN `created` TIMESTAMP NULL AFTER `type_name`;
    

    关于自动更新部分,详情请查看https://dev.mysql.com/doc/refman/8.0/en/timestamp-initialization.html

    【讨论】:

      【解决方案3】:

      FWIW,我最终使用 SQL 添加列,来自 SO 帖子 (Stackoverflow):

      ALTER TABLE security_type ADD updated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;

      ALTER TABLE security_type ADD created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;

      但是,检查表定义,我看到类型是 TIMESTAMP,而我从下拉列表中选择了它作为 TIMESTAMP()(带括号)。如果在 Workbench 中添加这些列,它还会显示应该输入的 DefaultExpression:

      【讨论】:

        猜你喜欢
        • 2017-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-29
        • 1970-01-01
        相关资源
        最近更新 更多