ORACLE11G-增强的默认列值功能

ORACLE11G之前,当对有记录的Table添加带有默认值的列时,ORACLE将立即用默认值为每行的心裂执行更新。
在更新过程中,数据库在表上使用排它锁,限制其他用户访问。
如果表有大量的行,则会产生大量的REDO和UNDO,并耗费大量的时间。
SQL> select * from T;
        ID NAME
---------- --------------------
         1 ICOL$
         2 I_USER1
         3 CON$
         4 UNDO$
         5 JXL
         6 I_OBJ#
         7 PROXY_ROLE_DATA$
         8 I_IND1
         9 I_CDEF2
        10 I_PROXY_ROLE_DATA$_1

SQL> alter table T add (sex varchar2(4) default 'man');

Table altered.

Elapsed: 00:00:00.79
SQL> select * from T;

        ID NAME                 SEX
---------- -------------------- --------
         1 ICOL$                man
         2 I_USER1              man
         3 CON$                 man
         4 UNDO$                man
         5 JXL                  man
         6 I_OBJ#               man
         7 PROXY_ROLE_DATA$     man
         8 I_IND1               man
         9 I_CDEF2              man
        10 I_PROXY_ROLE_DATA$_1 man

ORACLE11G 开始,为指定为not null的列所指定的任何默认值都存储在数据字典中,而非表中。因此新列的增加只是瞬间的银耳消除DBA增加新列的主要障碍。
新列的增加所涉及的就是用表示新列的默认值一次性更新数据字典,。这样做忽略了表的尺寸。另外最大的优点是为新列添加默认值时不使用任何空间。

SQL> select * from T;

        ID NAME
---------- --------------------
         1 ICOL$
         2 I_USER1
         3 CON$
         4 UNDO$
         5 JXL
         6 I_OBJ#
         7 PROXY_ROLE_DATA$
         8 I_IND1
         9 I_CDEF2
        10 I_PROXY_ROLE_DATA$_1


SQL> alter table T add (sex varchar2(4) default 'man');

Table altered.
Elapsed: 00:00:00.73

SQL> alter table T add (sex2 varchar2(4) default 'wman' not null);

Table altered.

Elapsed: 00:00:00.15


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15412087/viewspace-1847027/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15412087/viewspace-1847027/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值