程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle中表添加帶有默認值列的討論(包括12C新特性)

Oracle中表添加帶有默認值列的討論(包括12C新特性)

編輯:Oracle教程

Oracle中表添加帶有默認值列的討論(包括12C新特性)


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

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

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中一樣

 

在設置完成以後,如果是新插入的行,在默認值列,會將數據真正的插入到行

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved