强制 MySQL 更新 TIMESTAMP 列
Force MySQL to update TIMESTAMP column
我相信我已经将我的 5.6.17 ver MySQL 服务器设置为识别 IANA TZ 数据库,
证明了这一点
- 一个 system_time_zone 变量被设置为 "Pacific Daylight Time"
- 一个 time_zone 变量被设置为 UTC
- NOW(),给我一个标准的 SQL 格式日期时间
我认为这足以创建一个自动更新时间戳字段,但是,如果我通过以下方式创建 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;
这里假设我们尝试更新的字段是时间戳类型的字段
我相信我已经将我的 5.6.17 ver MySQL 服务器设置为识别 IANA TZ 数据库,
证明了这一点- 一个 system_time_zone 变量被设置为 "Pacific Daylight Time"
- 一个 time_zone 变量被设置为 UTC
- NOW(),给我一个标准的 SQL 格式日期时间
我认为这足以创建一个自动更新时间戳字段,但是,如果我通过以下方式创建 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;
这里假设我们尝试更新的字段是时间戳类型的字段