生產(chǎn)環(huán)境中涮因,經(jīng)常會(huì)因?yàn)橄到y(tǒng)迭代升級(jí)而修改表結(jié)構(gòu)呵俏。
如果遇到了對(duì)大表做添加有default值字段的操作畔师,一定要格外注意,因?yàn)檫@個(gè)操作相當(dāng)于在添加字段之后做update default value的動(dòng)作趣效,導(dǎo)致添加字段很慢揖膜,而且會(huì)將表加上排它鎖惰瓜,阻礙其他dml語句執(zhí)行。
變更SQL示例:
alter table scott.test1 add new_col varchar(8) default 'testcol';
繞坑方法:如果新加字段帶有not null約束就會(huì)很快執(zhí)行完畢茸炒。
這是11g對(duì) 新增“not null & default”字段 進(jìn)行了優(yōu)化愕乎,默認(rèn)值以及對(duì)應(yīng)的表信息、列信息一起存儲(chǔ)在一個(gè)新增數(shù)據(jù)字典表ecol$中壁公,所以建議開發(fā)人員妆毕,如果業(yè)務(wù)允許,最好將后添加的帶有默認(rèn)值的字段設(shè)置為not null贮尖。
通常的業(yè)務(wù)邏輯下,有默認(rèn)值的字段都不會(huì)被重置為null趁怔,即增加not null約束不會(huì)影響原業(yè)務(wù)邏輯湿硝。
測(cè)試:
Paste_Image.png