一尘不染

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

mysql

如果我在类型表中具有一列TIMESTAMP并且具有默认值:CURRENT_TIMESTAMP如果我更新同一行中 任何
其他列的值,此列是否会更新为当前时间戳?
似乎没有,但是我不确定这是否应该发生。
我不明白这是什么意思(来自MySQL文档):

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


阅读 399

收藏
2020-05-17

共1个答案

一尘不染

发出命令 SHOW CREATE TABLE whatever

然后看表定义

它可能有这样一条线

logtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

在里面。 DEFAULT CURRENT_TIMESTAMP表示INSERT没有明确的时间戳设置的任何人都会使用当前时间。同样,这ON UPDATE CURRENT_TIMESTAMP意味着没有显式时间戳的任何更新都会导致当前时间戳值的更新。

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

或者,如果第一时间未正确创建时间戳列,则可以对其进行更改。

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

这将导致对表的INSERT和UPDATE操作都自动更新您的时间戳列。如果要更新whatevertable而不更改时间戳,即,

当其他列更改时,防止更新列

那么您需要发布此类更新。

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

并且,这TIMESTAMP仅适用于列,不适用于DATETIMEDATE列。因为列是TIMESTAMPs,所以考虑了时区:在正确配置的服务器计算机上,这些值始终存储在UTC中,并在检索时转换为本地时间。

2020-05-17