强制MySQL更新TIMESTAMP列

时间:2015-05-20 22:01:44

标签: mysql timestamp auto-update

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

所示
  • 将system_time_zone变量设置为" Pacific Daylight Time"
  • 将time_zone变量设置为UTC
  • NOW(),给我一个标准的SQL格式日期时间

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

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;

仍然是邮票是空的

id  stamp   stuff
1   NULL    xyz

我尝试将创建更改为

stamp TIMESTAMP DEFAULT NOW(),

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

我也尝试使用

stamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

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

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

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

3 个答案:

答案 0 :(得分:3)

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

DEFAULT CURRENT_TIMESTAMP仅在创建行时设置当前时间戳。

您正在寻找该物业 ON UPDATE CURRENT_TIMESTAMP 。这将在每次更新行时设置时间戳,因为至少有一行的值实际发生了变化。

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

从底线开始,像这样创建你的表格,stamp将始终为你提供上次更改的时间戳:

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

答案 1 :(得分:0)

很抱歉,没有足够的声誉就无法评论,我不知道什么是IANA TZ数据库

但您可以在创建表时尝试添加On update CURRENT_TIMESTAMP

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

答案 2 :(得分:0)

这很简单

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

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