You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中仅更新exist为'1'时触发timestamp列更新的实现方案

解决方案

1. 修改表结构,取消tm列的自动更新行为

默认的TIMESTAMP列若带有ON UPDATE CURRENT_TIMESTAMP属性,会在任意字段更新时自动刷新时间戳。我们需要移除该属性,让tm列仅在插入或手动指定时更新:

ALTER TABLE admins MODIFY COLUMN tm TIMESTAMP DEFAULT CURRENT_TIMESTAMP;

这条语句会覆盖原有规则,使tm仅在新记录插入时自动设为当前时间,后续更新除非手动赋值,否则保持不变。

2. 控制更新语句,仅在设置exist='1'时更新tm

根据需求分场景编写更新逻辑:

场景1:将exist设为'1'时,同步更新tm

此时需在UPDATE语句中显式指定tm字段为当前时间戳:

if (isset($_GET["id"]) && isset($_GET["set_exist_to_1"])) {
    $id = $_GET["id"];
    $sql = "UPDATE admins SET exist='1', tm=CURRENT_TIMESTAMP WHERE id=$id";
    $con->query($sql);
}

场景2:更新其他字段或设置exist='0'时,不更新tm

像你原有更新exist='0'的语句,直接保留即可——因为未指定tm字段,tm列不会被修改:

if (isset($_GET["id"]) && isset($_GET["set_exist_to_0"])) {
    $id = $_GET["id"];
    $sql = "UPDATE admins SET exist='0' WHERE id=$id";
    $con->query($sql);
}

若需更新bez、type等其他字段,同样只需在SET子句中包含目标字段,无需提及tm:

UPDATE admins SET bez='new_name', type='admin' WHERE id=$id;

通过以上设置,就能实现仅当exist被设为'1'时,tm列才更新为当前时间,其他字段变更不会影响tm的值。

内容的提问来源于stack exchange,提问作者wemfal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:57:24