MySQL:更新条目而不更新时间戳

69 mysql sql timestamp

我在mysql表中有一个时间戳,其属性为"ON UPDATE CURRENT_TIMESTAMP".有没有办法在特殊场合手动禁用更新时间戳?(例如:更新条目以修改博客文章,但不重新更新)

And*_*ndy 131

您可以在update命令中手动将列的值设置为其当前值:

UPDATE table SET x=y, timestampColumn=timestampColumn WHERE a=b;
Run Code Online (Sandbox Code Playgroud)

如果未在查询中设置该值,则将根据表定义将其更新为当前时间戳.

  • "慢" - 多少钱?超过OP去除魔术'ON UPDATE`的时间长,在他的所有其他查询中添加`NOW()`并重新测试他的应用程序? (13认同)
  • 谢谢,这正是我所需要的.我有表"blogposts",当我更新视图计数时,它会更新"datetime_edited"(在更新时间戳上)列.在其他每个场合,我都需要更新"datetime_edited"字段 - 标题或说明更改,新图片上传等. (2认同)
  • 我希望我能不止一次地投票!我甚至不知道你可以在更新声明中引用记录中的列!一个全新的世界! (2认同)

OMG*_*ies 45

有没有办法在特殊场合手动禁用更新时间戳?(例如:更新条目以修改博客文章,但不重新更新)

听起来您需要配置默认约束,以便它仅在插入时填充列:

DEFAULT CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

将其更改为仅此意味着任何修订都不会触发更新时间戳值.IE:如果你昨天创建了博客帖子,并且今天更正了错字 - 列中的日期仍然是昨天.


Oli*_*lie 21

要使表/时间戳自动更新:

ALTER TABLE myTable
CHANGE myTimestampColumn
        myTimestampColumn TIMESTAMP NOT NULL
                       DEFAULT CURRENT_TIMESTAMP 
                       ON UPDATE CURRENT_TIMESTAMP;
Run Code Online (Sandbox Code Playgroud)

要使其自动更新:

ALTER TABLE myTable
CHANGE myTimestampColumn
        myTimestampColumn TIMESTAMP NOT NULL
                       DEFAULT CURRENT_TIMESTAMP;
Run Code Online (Sandbox Code Playgroud)

注意:"default current_timestamp"部分仅在默认时间将其设置为当前戳记,因为该字段不为null.如果您愿意,可以删除not null和default.


kni*_*ttl 9

不要使用时间戳,而是手动跟踪时间.

如果你真的想更新记录而不更新它的时间戳使用:

UPDATE `table` SET `timestamp` = `timestamp`, `col` = 'new data' …;
Run Code Online (Sandbox Code Playgroud)

  • "不要使用时间戳",为什么? (13认同)
  • 它们只能代表1970年1月1日至3月31日期间的时间; 只有第一个时间戳列自动更新; 从备份时间戳恢复到当地时区时.并且,根据您的应用程序,您可能不希望在后端运行sql update语句时更新该列(您只希望在使用前端编辑数据时更新时间戳) (4认同)