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
相关产品推荐
相关产品推荐

