我相信我已将我的5.6.17版本的MySQL服务器设置为识别IANA TZ数据库,如
所示我认为这足以创建一个自动更新时间戳字段,但是,如果我通过以下方式创建表:
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字段在创建时填充并在更新时进行修改?
答案 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;
这里我们假设我们尝试更新的字段是时间戳类型字段