92

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

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

4

5 回答 5

155

发出命令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'

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

于 2013-09-23T15:14:17.717 回答
15

我认为您必须像这样定义时间戳列

创建表 t1
(
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

这里

于 2013-09-23T15:13:03.427 回答
6

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

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

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

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

 update my_table
 set price = 2

它不会改变 updated_at 的值,因为价格值实际上并没有改变(它已经是 2)。

但是,如果您有另一行的价格值不是 2,那么该行的 updated_at 值(价格 <> 3)将更新为 CURRENT_TIMESTAMP。

于 2018-02-27T14:29:21.250 回答
4

在数据库中添加触发器:

DELIMITER //
CREATE TRIGGER update_user_password 
  BEFORE UPDATE ON users
  FOR EACH ROW
    BEGIN
      IF OLD.password <> NEW.password THEN
        SET NEW.password_changed_on = NOW();
      END IF;
    END //
DELIMITER ;

密码更改时间仅在更改密码栏时才会更新。

于 2017-09-25T09:48:08.490 回答
2

添加在哪里可以找到UPDATE CURRENT_TIMESTAMP,因为对于新人来说这是一个混乱。

大多数人会使用 phpmyadmin 或类似的东西。

您选择的默认值 CURRENT_TIMESTAMP

您选择 UPDATE CURRENT_TIMESTAMP 的属性(不同的下拉菜单)

于 2017-02-05T19:58:27.347 回答