当前位置: 首页 > 知识库问答 >
问题:

时间戳(自动)何时更新?

井轶
2023-03-14

如果我在类型为TIMESTAMP的表中有一列,并且默认为:CURRENT\u TIMESTAMP,那么如果我更新同一行中任何其他列的值,该列是否会更新为当前时间戳<似乎没有,但我不确定这是否应该发生
我无法理解这意味着什么(从MySQL文档):

如果该列是自动更新的,则在行中任何其他列的值从其当前值更改时,该列将自动更新为当前时间戳。如果所有其他列都设置为其当前值,则该列保持不变。若要防止在其他列更改时更新该列,请显式地将其设置为当前值。要更新列,即使其他列没有改变,显式地将其设置为它应该具有的值] 2

共有3个答案

方焱
2023-03-14

当行中任何其他列的值从其当前值更改时,自动更新的列将自动更新为当前时间戳。如果将所有其他列设置为其当前值,则自动更新的列将保持不变。

为了解释它,我们假设您只有一行:

-------------------------------
| price | updated_at          |
-------------------------------
|  2    | 2018-02-26 16:16:17 |
-------------------------------

现在,如果运行以下更新列:

 update my_table
 set price = 2

它不会更改更新的_at的值,因为价格值实际上没有更改(它已经是2)。

但是,如果您有另一行的price值不是2,则更新的_在该行的值(price

令狐宜民
2023-03-14

我认为您必须像这样定义timestamp列

CREATE TABLE t1 
(
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

看这里

段干博明
2023-03-14

给命令SHOW CREATE TABLE任何

然后看表定义。

它可能有这样一条线

logtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

在里面<代码>默认当前时间戳意味着没有明确时间戳设置的任何插入都使用当前时间。同样,更新当前时间戳时的表示任何没有显式时间戳的更新都会导致对当前时间戳值的更新。

您可以在创建表时控制此默认行为。

或者,如果一开始没有正确创建时间戳列,您可以对其进行更改。

ALTER TABLE whatevertable
     CHANGE whatevercolumn 
            whatevercolumn TIMESTAMP NOT NULL
                           DEFAULT CURRENT_TIMESTAMP 
                           ON UPDATE CURRENT_TIMESTAMP;

这将导致对表的INSERT和UPDATE操作自动更新时间戳列。如果你想更新whevertable而不改变时间戳,也就是说,

防止列在其他列更改时更新

然后你需要发布这种更新。

UPDATE whatevertable
   SET something = 'newvalue',
       whatevercolumn = whatevercolumn
 WHERE someindex = 'indexvalue'

这适用于TIMESTAMPDATETIME列。(在MySQL版本5.6.5之前,它仅适用于时间戳s)当您使用时间戳s时,会考虑时区:在正确配置的服务器机器上,这些值始终存储在UTC中,并在检索时转换为本地时间。

 类似资料:
  • 问题内容: 如果我在类型表中具有一列并且具有默认值:CURRENT_TIMESTAMP如果我更新同一行中 任何 其他列的值,此列是否会更新为当前时间戳? 似乎没有,但是我不确定这是否应该发生。 我不明白这是什么意思(来自MySQL文档): 如果该列是自动更新的,则当该行中任何其他列的值从其当前值更改时,它将自动更新为当前时间戳。如果所有其他列均设置为其当前值,则该列保持不变。为防止当其他列更改时该

  • 系统支持自动写入创建和更新的时间戳字段(默认关闭),有两种方式配置支持。 第一种方式是全局开启,在数据库配置文件中进行设置: // 开启自动写入时间戳字段 'auto_timestamp' => true, 第二种是在需要的模型类里面单独开启: <?php namespace app\index\model; use think\Model; class User extends Model

  • 问题内容: 如何在到期时间戳后自动执行MySQL更新或插入? 因此,可以说时间戳是,我希望在经过该日期和时间后自动更新MySQL DB,因此今天之后。 我想更新我的商品,但是我的网站没有打开浏览器,所以我想我需要某种服务器触发器吗?我怎么做?非常感谢 我有以下查询每1秒执行一次,它不起作用: 问题答案: 使用可以用于 MySQL事件(恕我直言最好的候选人) cron作业或Windows Task

  • 我在迁移(模式)和模型中添加了时间戳 我创建了一个包含数据库所有字段的数组,并将其插入到数据库中。 在表中,它更新除updated_at、created_at时间戳之外的所有字段 我有另一个(默认)用户模型,它更新时间戳。在那个模型中,我使用-

  • 本文向大家介绍sqlite时间戳转时间语句(时间转时间戳),包括了sqlite时间戳转时间语句(时间转时间戳)的使用技巧和注意事项,需要的朋友参考一下 下面是具体的实现代码:

  • 我知道这是一个非常常见的问题,但我觉得我找到的答案并没有真正解决问题。我将概述我的具体用例,并对来自其他SO答案和网络的信息进行总结。 对于我正在编写的服务,数据库条目被创建并存储在移动设备和我们的网站上,需要以两种方式同步。我们目前的目标是Android和iOS,它们都使用sqlite作为关系数据库。服务器端是使用Django和MySQL在Python中实现的,但将来可能会有其他解决方案取代它。

  • 我正在使用django模型。django设置中的TIMEZONE是UTC。并通过做一些算术来构建时间戳。 当我使用::timestamp时,时间戳返回为2021 07月26日00:00:00如果我使用::timestamp,它将变为2021 07月26日00:00:00,即使请求的\u时区是“美国/纽约” 我希望输出为2021 07月26日00:00:00-04:00,即显示与“附加美国/纽约”偏

  • 我有一个Flink程序,它接受两个流,即数据/传感器读数流和警报规则流。我正在广播规则流,并将其连接到数据流以生成动态警报。ProcessingTime的一切都很好,但EventTime却不行。我已经分配了时间戳 > 当两个流(即带有时间戳的流)同时出现时,如何使用“EventTime”生成警报 我是否也必须为我的规则流分配时间戳和水印? 因为我的规则流只有在有任何添加/修改时才会有记录。是否有任