码迷,mamicode.com
首页 > 数据库 > 详细

Oracle中表添加带有默认值列的讨论(包括12C新特性)

时间:2015-01-31 23:19:31      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

这个问题是我一直都在关注的问题。

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

在设置完成以后,如果是新插入的行,在默认值列,会将数据真正的插入到行


Oracle中表添加带有默认值列的讨论(包括12C新特性)

标签:

原文地址:http://blog.csdn.net/dbcrocodile/article/details/43347489

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!