mysql - 根据条件更新 MySQL 时间戳

标签 mysql

我有一个 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/

相关文章:

mysql - 如何对父 ID 值求和并显示以代替 null

php - 如何使用 HTML5、Jplayer 和 mysql 跟踪播放列表中的歌曲播放?

mysql - 困难的 Rails ActiveModel 查询

php - mysql 锁定问题

java - 结果集字段索引减一

mysql - SQL 插入/更新确实失败,但不调用错误

mysql - 使用phpMyAdmin SQL查询的日期显示格式

docker容器中的Java服务未连接到主机mysql

mysql - 内置MySQL帮助文档

mysql - 如何在VB.NET中连接 Crystal 报表和MySQL