65

有没有办法在单个“CREATE TABLE AS”语句中设置主键?

示例 - 我希望将以下内容写入 1 个语句而不是 2 个语句:

 CREATE TABLE "new_table_name" AS SELECT a.uniquekey, a.some_value + b.some_value FROM "table_a" AS a, "table_b" AS b WHERE a.uniquekey=b.uniquekey;
 ALTER TABLE "new_table_name" ADD PRIMARY KEY (uniquekey);

一般来说,有没有更好的方法(假设有超过 2 个表,例如 10 个)?

4

6 回答 6

70

根据手册:创建表创建表,您可以:

  • 先用主键建表,再用select into
  • 首先创建表,然后使用添加主键

但并非两者都像使用主键一样创建表- 你想要的。

于 2012-06-24T09:46:37.407 回答
23

如果要创建与另一个表具有相同表结构的新表,可以在一个语句中执行此操作(创建新表和设置主键),如下所示:

create table mytable_clone (like mytable including defaults including constraints including indexes);
于 2012-06-25T06:59:36.817 回答
1

不,没有更短的方法来创建表和主键。

于 2012-06-24T09:41:56.390 回答
1

请参阅下面的命令,它将创建一个包含所有约束且没有数据的新表。在 postgres 9.5 中工作

CREATE TABLE IF NOT EXISTS <ClonedTableName>(like <OriginalTableName> including all)
于 2019-12-02T07:40:25.850 回答
-3

在 mysql 中很好,都可以在一个命令中实现

命令是

create table new_tbl (PRIMARY KEY(`id`)) as select * from old_tbl;

idold_tbl 主键的列在哪里

完毕...

于 2017-08-25T16:49:50.877 回答
-6

你可以这样做

CREATE TABLE IOT (EMPID,ID,Name, CONSTRAINT PK PRIMARY KEY( ID,EMPID)) 
 ORGANIZATION INDEX NOLOGGING COMPRESS 1 PARALLEL 4
AS SELECT 1 as empid,2 id,'XYZ' Name FROM dual;
于 2015-08-06T12:40:06.977 回答