使用create table as select迁移数据时,需要注意的事

结论

create table as select无法迁移原表的default value

摘要

1、在做数据迁移时候,很多人会使用create new_table as select * from old_table 的方式来建表,但是这样做有弊端,不能将原表中的default value一同迁移过来。

2、 Using the CREATE TABLE … AS SELECT … command: This command will copy acrooss to the new table all the data,but the constraints triggers ,and so on will not be transferred to the new table.——Oracle官方教材

论证

为了证明结论,做了以下测试:

step 1

新建一个表,设置default值,然后插入一行使用default值的数据,语句如下:

create table ods.demo(id varchar default'Ksharp',team varchar default '3D');
insert into ods.demo(id,team) values 
('johnny R','Mouz'),
(default,default)
;
select *
from ods.demo

结果显示如图:
image

step2

使用create table as select 语句复制demo表,并再次插入default值语句如下:

create table ods.demo_copy as(select * from ods.demo);
insert into ods.demo_copy(id,team) values 
(default,default);
select *
from ods.demo_copy

结果显示如图:

可观察到:新插入的值为null,null而非原表的default值Ksharp,3D

总结

所以在做数据库迁移时候,使用create table as select时需要注意原表中有无default值约束

1 Like