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

如何增量更新timestamp字段 实现now()逐行递增1秒的更新效果

问题原因

你之前的UPDATE语句所有行拿到相同时间,是因为now()(以及绝大多数SQL的当前时间函数)在单个SQL语句执行周期内只会计算一次,不会逐行重新取值。

解决方案

MySQL / MariaDB 写法

用用户自定义变量记录偏移量,逐行递增:

-- 初始化偏移量,第一行加0秒,所以初始设为-1
SET @time_offset = -1;

UPDATE some_table
SET `timestamp` = DATE_ADD(NOW(), INTERVAL (@time_offset := @time_offset + 1) SECOND)
-- 确保按id顺序分配偏移量,可根据需求修改排序规则
ORDER BY id ASC;

如果需要指定固定起始时间,把NOW()替换成对应的时间值即可,比如'2021-08-17 04:14:00'。

PostgreSQL 写法

用窗口函数生成行偏移量再关联更新:

WITH offset_mapping AS (
  SELECT 
    id,
    -- 行号从1开始,减1后第一行偏移为0秒
    (ROW_NUMBER() OVER (ORDER BY id ASC) - 1) AS second_offset
  FROM some_table
)
UPDATE some_table t
SET `timestamp` = NOW() + (offset_mapping.second_offset || ' SECOND')::INTERVAL
FROM offset_mapping
WHERE t.id = offset_mapping.id;
操作建议

执行UPDATE前建议先运行查询校验预期结果,避免误改数据,以MySQL为例:

SET @time_offset = -1;
SELECT 
  id,
  `timestamp` AS original_time,
  DATE_ADD(NOW(), INTERVAL (@time_offset := @time_offset + 1) SECOND) AS expected_time
FROM some_table
ORDER BY id ASC;

确认expected_time符合需求后再执行更新操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:21:04