我有一个 mysql 表“ping_status”
CREATE TABLE `ping_status` (
`id` int(11) NOT NULL,
`ping_status` tinyint(4) DEFAULT '0',
`change_status` tinyint(4) DEFAULT '0',
`ts` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
ping_status
更改时的ts = time
列
当只有 ping_status
发生变化时,如何更新列 ts
。如果change_status发生变化,ts
中不应有更新;
最佳答案
来自docs ,“如果该列是自动更新的,则当该行中任何其他列的值从其当前值更改时,它会自动更新为当前时间戳”。这意味着当您更新 ping_status 或 change_status 时,ts 将设置为 current_timestamp。因此,当您更新 ping_status 时,请删除 ON UPDATE CURRENT_TIMESTAMP
并显式更新 ts。
update ping_status set ping_status=some_value, ts=now() where id=some_value;
由于您仍然拥有DEFAULT CURRENT_TIMESTAMP
,因此您插入的任何新值仍将获得当前时间戳。
顺便说一句,最好尽可能避免使用公共(public)字段和表名称。
关于mysql - 根据条件更新 MySQL 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25215931/