“create table new_table as select * from old_table”会将表结构作为old_table提供给new_table吗?

时间:2015-12-10 03:36:08

标签: sql oracle

我有一张桌子old_table(在oracle 10g中)

我必须将old_table的整个数据复制到new_table。

那一刻,我将使用

create table new_table 
as 
select * from old_table

这个命令会创建一个与old_table完全相同的表吗?

例如,如果old_table在某些列上有一些索引。

如果我使用上面的命令,那么new_table也有相同的索引?

2 个答案:

答案 0 :(得分:1)

它只会创建具有默认设置的表和与原始表相同的结构(相同的列和列类型)。它不会创建任何索引,约束,授权,触发器和依赖于原始表的任何其他对象。

答案 1 :(得分:0)

你可以试试这个

create table new_table as select * from old_table
where 1=2;

它不会复制约束(我认为除了NOT NULL)。

如果要复制完整结构,则更高级的方法是:

SET LONG 5000
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME' ) FROM DUAL;

这将为您提供完整的创建语句文本,您可以根据需要修改该文本以创建新表。您当然必须更改表的名称和所有约束。

(您也可以使用EXP / IMP在旧版本中执行此操作,但现在它更容易。)

如果您所使用的表位于不同的架构中:

SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ) FROM DUAL;