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

如果我有一个types为TIMESTAMP的表中的列,并且默认情况下是CURRENT_TIMESTAMP,那么如果我更新同一行中的任何其他列的值,该列是否会更新为当前时间戳?
它似乎没有,但我不知道这是怎么回事。
我不明白这是什么意思( 从MySQL文档 ):

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

给命令SHOW CREATE TABLE whatever

然后看看表的定义。

它可能有这样的一条线

 logtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 

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

创build表格时,您可以控制此默认行为。

或者,如果时间戳列没有正确创build,您可以更改它。

 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列。 由于列是TIMESTAMP ,所以时区是考虑到的:在正确configuration的服务器机器上,这些值始终以UTC格式存储,并在检索时转换为本地时间。

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

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

看到这里

在数据库中添加触发器:

 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 ; 

密码更改时间将只在密码列更改时更新。

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

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

您selectCURRENT_TIMESTAMP的默认值

属性 (不同的下拉列表)你selectUPDATE CURRENT_TIMESTAMP