强制 MySQL 更新 TIMESTAMP 列

Force MySQL to update TIMESTAMP column

相信我已经将我的 5.6.17 ver MySQL 服务器设置为识别 IANA TZ 数据库,

证明了这一点

我认为这足以创建一个自动更新时间戳字段,但是,如果我通过以下方式创建 table:

CREATE TABLE test (
  id SERIAL,
  stamp TIMESTAMP,
  stuff VARCHAR(255)
);
INSERT INTO test ( stuff ) VALUES ( 'abc' );
SELECT * FROM test;

记录似乎是在标记字段中使用 NULL 创建的:

id  stamp   stuff
1   NULL    abc

我以为只有在更新时才会输入日期,但是当我更新时:

UPDATE test SET note = 'xyz' WHERE id = 1;

邮票仍然是 NULL

id  stamp   stuff
1   NULL    xyz

我试图将创建更改为

stamp TIMESTAMP DEFAULT NOW(),

它提供了一个正确的值,但是当我更新时(甚至几分钟后),戳记字段保持不变。

我也尝试过使用

stamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

这也给了我一个初始值,但在更新时从未改变。

此外,尝试附加 AUTO_INCREMENT 似乎对我不起作用。我有没有提到我是 MySQL 新手?

如何强制我的 TIMESTAMP 字段在创建时填写并在更新时修改?

类型为 TIMESTAMP 的字段也只是另一个没有任何特殊属性(如自动初始化或更新)的字段。

DEFAULT CURRENT_TIMESTAMP 仅在您 创建行 .

时设置当前时间戳

您正在寻找属性ON UPDATE CURRENT_TIMESTAMP。这将在您每次更新行时设置时间戳 ,前提是至少有一个行的值实际发生了变化。

有关更多信息,请查看有关 Automatic Initialization and Update for TIMESTAMP 的 MySQL 文档。

最重要的是,像这样创建您的 table,stamp 将始终为您提供上次更改的时间戳:

CREATE TABLE test (
  id SERIAL,
  stamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  stuff VARCHAR(255)
);

对不起,没有足够的声誉无法发表评论,我不知道什么是 IANA TZ 数据库

但是你可以在创建table时尝试添加On update CURRENT_TIMESTAMP:

CREATE TABLE test (
    id SERIAL,
    stamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`
    stuff VARCHAR(255)
)

很简单

update table set fieldname=now() where fieldname = value;

这里假设我们尝试更新的字段是时间戳类型的字段