结论
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
结果显示如图:
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值约束