Oracle中表添加帶有預設值列的討論(包括12C新特性),oracle12c

來源:互聯網
上載者:User

Oracle中表添加帶有預設值列的討論(包括12C新特性),oracle12c

這個問題是我一直都在關注的問題。

11G關於這個問題已經有了改善,到了12C更是多了一些新特性

關於11G的新特性討論,參考我這篇部落格http://blog.csdn.net/dbcrocodile/article/details/21170407

12C關於這方面是在11G新特性上進行添加的。

11G中添加一列並設定預設值,不會對錶中實際資料做更改,而是通過對資料字典中做標記

我們查詢的時候,會對新列做一個類似nvl()之類的操作,如果是null,則返回預設的數值。

但是,看如下語句

SQL> alter table t add MrDai number default 10000 not null;    Table altered.    Elapsed: 00:00:00.34  

在11G中,新加一列必須是NOT NULL屬性,否則將無法實現該特性。依然會造成超大DDL事務,hang死關於該表的一切操作(包括select)。

如果不明白該特性,很容易以為有了特性,而貿然添加,造成非常嚴重的事故。

而12C中,對這一特性再次做出了加強,我們這裡可以不用設定not null,極大減少了可能的誤操作

看如下實驗過程

建立表t,其中100多萬行資料。

SQL> select count(*) from t;  COUNT(*)----------   1454256

對錶直接增加一列(不設定not null)

SQL> alter table t add MrDai1 number default 10000;Table altered.Elapsed: 00:00:00.03

速度飛快。當然,和11G中一樣

在設定完成以後,如果是新插入的行,在預設值列,會將資料真正的插入到行


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.