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

使用CREATE TABLE AS SELECT语句创建表时会复制哪些约束?

CREATE TABLE AS SELECT(CTAS)复制约束的规则

使用CREATE TABLE AS SELECT(CTAS)创建新表时,绝大多数原表约束不会被自动复制,只有少数基础属性会继承,具体行为因数据库系统而异:

主流数据库的具体表现

  • MySQL/MariaDB:

    • 仅会保留列的数据类型、长度,以及列的NULL/NOT NULL属性(查询直接引用原表列时);如果原表列的默认值是常量,也会被复制。
    • 主键、外键、唯一约束、检查约束、触发器、索引等都不会被复制。
  • PostgreSQL:

    • 仅复制列的数据类型和NOT NULL约束(查询直接选择原表列时)。
    • 主键、外键、唯一约束、检查约束、默认值、索引、触发器等均不会自动继承,需要手动添加。
  • Oracle:

    • 默认仅复制列的数据类型、NOT NULL约束(直接引用原表列时),以及常量类型的列默认值。
    • 主键、外键、唯一约束等不会自动复制;Oracle 12c及以上版本可以通过添加INCLUDING CONSTRAINTS子句,复制除了外键之外的其他约束。

注意事项

如果需要完整保留原表的约束,更可靠的方式是:先手动创建包含所有所需约束的空表,再通过INSERT INTO ... SELECT语句将原表数据导入新表,而不是直接使用CTAS。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:25:22