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

如何将单条表数据复制到另一表并修改ID值(示例ID改为20)

解决方法:复制行并修改目标ID

你的当前语句INSERT INTO work_done SELECT * FROM work_todo WHERE id = 10会直接把原行的id=10复制到work_done表中,没法实现将目标ID改为20的需求。这里有两种靠谱的解决方式:

方式一:明确指定所有字段(推荐)

这种方法最清晰,也能避免因表结构变化导致的潜在问题。你需要列出work_done表的所有字段,然后在SELECT语句中将id字段替换为20,其他字段沿用原表的值:

INSERT INTO work_done (id, field1, field2, field3, ...)
SELECT 20, field1, field2, field3, ...
FROM work_todo
WHERE id = 10;

把上面的field1、field2等替换成work_todo和work_done表中实际的字段名即可。注意要保证两边的字段顺序和数量完全匹配。

方式二:动态排除ID字段(适合字段较多的场景)

如果表的字段非常多,不想逐个列出,可以用子查询或数据库特定语法排除原ID,再手动指定新ID:

以MySQL为例:

INSERT INTO work_done
SELECT 20, t.*
FROM (
    SELECT field1, field2, field3, ...  -- 列出除id外的所有字段
    FROM work_todo
    WHERE id = 10
) t;

以PostgreSQL为例:

利用WITHOUT COLUMN语法直接排除原ID字段:

INSERT INTO work_done
SELECT 20, (work_todo.*)::work_todo WITHOUT COLUMN id
FROM work_todo
WHERE id = 10;

注意事项:

  • 如果work_done的id是自增主键,需要确保20这个ID值未被占用,否则会触发主键冲突错误。部分数据库可能需要临时关闭自增约束(比如MySQL执行SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';)才能手动插入指定ID。
  • 优先推荐方式一,因为它的可读性和稳定性更强,后续表结构变更时更容易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:33:07