生产环境中,经常会因为系统迭代升级而修改表结构。
如果遇到了对大表做添加有default值字段的操作,一定要格外注意,因为这个操作相当于在添加字段之后做update default value的动作,导致添加字段很慢,而且会将表加上排它锁,阻碍其他dml语句执行。
变更SQL示例:
alter table scott.test1 add new_col varchar(8) default 'testcol';
绕坑方法:如果新加字段带有not null约束就会很快执行完毕。
这是11g对 新增“not null & default”字段 进行了优化,默认值以及对应的表信息、列信息一起存储在一个新增数据字典表ecol$中,所以建议开发人员,如果业务允许,最好将后添加的带有默认值的字段设置为not null。
通常的业务逻辑下,有默认值的字段都不会被重置为null,即增加not null约束不会影响原业务逻辑。
测试: