oracle11g中,在添加一个包含default值的not null字段,oracle不会去更新现有的数据,oracle需要做的不过是将默认值以及对应的表
今天同事问我一个问题他说在一张2000万的表上增加了一个字段并字段一个默认值,,执行这条语句(alter table tablename add new_col default ‘col’)一个小时没有执行完,问我有没有其他解决方法
我查了一下资料发现
oracle11g中,在添加一个包含default值的not null字段,oracle不会去更新现有的数据,oracle需要做的不过是将默认值以及对应的表信息、列信息一起存储在一个新增数据字典表ecol$中。这张表利用blob字段存储alter table添加的default值
然后我测试一下情况(在11g中测试alter table tablename add new_col default ‘col’ 后代not null和不带not null的区别)
1.新建一张表test
sql> create table test (id number,name varchar(10));
表已创建。
2.向test表中插入500000记录
sql> begin
2 for i in 1..500000 loop
3 insert into test values(i,'jack');
4 end loop;
5 end;
6 /
pl/sql 过程已成功完成。
sql> select count(1) from test;
count(1)
----------
500000
sql>
sql> set timing on
3.向表中添加一个新的字段new_col1带有默认值如下语句不带not null
alter table t add new_col1 char(10) default 'testcolumn'
sql> alter table test add new_col1 char(10) default 'testcolumn';
表已更改。
已用时间: 00: 00: 43.23
sql>