【问题标题】:MySQL timestamp field default CURRENT_TIMESTAMP not working for existing rowsMySQL 时间戳字段默认 CURRENT_TIMESTAMP 不适用于现有行
【发布时间】:2018-09-12 14:33:47
【问题描述】:

在服务器中,我有 MySQL 版本:

5.1.61

它有一个名为 test 的表,有 10 列和 10K 行。 现在我决定添加一个新列

ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

添加了新列 ts。但问题是对于现有行,这个新列(ts)的值是 00:000:000 不是当前时间。

PS:当我添加新行或更新任何现有行时,ts 会更新为当前时间戳。

为什么默认 current_timestamp/now() 不适用于现有行?

编辑: 我可以运行一个简单的更新 SQL 来将现有行更新到当前时间。但我是数据库中的新手,我正在尝试知道是否可以使用默认值更新现有行。

【问题讨论】:

    标签: mysql timestamp


    【解决方案1】:

    MySQL 表中的DEFAULT 子句仅涉及将 记录添加到表中时发生的情况。没有遗留行为,DBMS 会返回到已经存在的记录并应用一些默认值。在这种情况下,如果您希望已经存在的记录带有当前时间戳,您可以进行全面更新:

    UPDATE yourTable
    SET ts = CURRENT_TIMESTAMP;
    

    此后,当您添加新记录且未为ts 列指定值时,将为其分配CURRENT_TIMESTAMP

    【讨论】:

    • 他在问为什么 CURRENT_TIMESTAMP 在添加新列时对现有行不起作用
    • @Ajay 嗯...我的回答解释了正在发生的事情以及发生的原因。你有没有费心去读它?
    • 哦,我的错误我很抱歉..:)
    • @TimBiegeleisen 感谢您的回答。我真的很想知道这是否可能。我以为我犯了错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    相关资源
    最近更新 更多