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

Oracle如何基于现有表建表时同步设置原表主键?

问题解答

在Oracle中,直接修改CREATE TABLE people1 AS (SELECT * FROM people);这类CTAS(Create Table As Select)语句,没办法直接给新表的id字段设置主键——因为CTAS的设计逻辑是仅复制原表的列数据类型、长度,以及NOT NULL这类基础约束,不会自动同步主键、外键、唯一约束,也不支持在AS子句后直接追加约束定义。

不过你可以换一种写法,显式定义新表的列结构并指定主键,同时通过AS SELECT导入原表数据,实现“建表+设主键+导数据”一步完成:

CREATE TABLE people1 (
    id int PRIMARY KEY,
    name varchar(55),
    status int,
    phone varchar(55)
) AS SELECT * FROM people;

注意事项:

  • 显式定义的列顺序、数据类型必须和SELECT * FROM people返回的列完全匹配,否则会抛出类型不匹配或列数不一致的错误。
  • 如果原表id列存在重复值(虽然原表id是主键不会出现,但其他场景要注意),执行这条语句会因主键唯一性约束报错,需先清理重复数据再操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:03:14