修改表增加字段默认值default

修改表增加字段默认值default

2013-09-28 10:11:51 我来说两句 作者:海鲨Oracle

收藏 我要投稿

修改表增加字段默认值default

对个生产库的表增加1个字段. 字段类型是INT 型, 表数据有2千万条,

?

1 a lter table table_name add xxoo number(4) default 0 ;

因此 不仅要修改字典, 还要刷新全部数据.

1) 在ALTER sql中有带缺省值,ORACLE 会直接刷新全部的记录。

2) 在ALTER sql中没有带缺省值,ORACLE 只会影响到后来的记录。

?

1 alter table table_name add xxoo number(4) default null;

2 Table altered

3

4 Executed in 0.062 seconds

带有default null 就可以了

?

1 alter table table_name add xxoo number(4) default 0;

2

3 Table altered

4 Executed in 1.625 seconds

原来的话 要更新所有的行, 会导致UNDO 段占用

使用语句Alter table a add test number(10) default 0;更新一个大表中字段时,表有四个分区,数据达到几十亿行,增加一个字段竟然要几个小时的时间,修改语句加上Nologging ,怎么没有作用呢?去找是不是哪有锁了呢,使用语句 select *

from dba_locks where lock_id1=33784;发现Session_id为14的一直在执行,那么他在执行什么呢!查询一下吧。 使用语句:

?

select a.sid,a.username,c.SQL_TEXT from v$session a, dba_locks b,v$sqlarea c 2 where b.lock_id1=33784 and a.SID=b.session_id 3 and a.SQL_ADDRESS=c.ADDRESS; 1

哦,原来他在Update Test 字段值为0. 至此总结到,原来Alter 之后做的竟然是Update ,也明白了为什么Undo 表空间会爆涨。去掉Default 0,呵呵,很快就OK 了。

建议没有必要时慎用Default

添加具有默认值的列

尽管对该特性感到满意,Jill 还在考虑与第一个问题相关的另一个问题。她希望添加 TAX_CODE 列,但该列不能为空。显然,当她向非空表添加非空列时,还必须指定默认值“XX”。因此,她编写了以下 SQL :

alter table sales add tax_code varchar2(20) default 'XX' not null;

但她在这里停下了。SALES 表十分巨大,大约有 4 亿行。她知道,在执行该语句时,Oracle 会立即添加该列,但在将控制权返回给她之前将更新所有行中的值“XX”。更新 4 亿行不仅要花费很长时间,还要填充还原段、生成大量重做任务并产生极大的性能开销。因此,Jill 必须在“安静时段”(即,停机期间)才能进行此更改。Oracle 数据库 11g 中有更好的方法吗?

当然有。上述语句将不会对表中的所有记录执行更新。尽管对于列值将自动设为“XX”的新记录来说,这不是问题,但当用户选择现有记录的该列时,这将返回 NULL ,是吗?

实际上并非如此。当用户选择现有记录的列时,Oracle 将从数据字典获取默认值并将其返回给用户。这样,您就实现了一箭双雕:可以将一个新列定义为非空并具有默认值,同时不会导致任何重做和还原开销。真棒!

oracle 中针对大表增加有默认值的字段的操作方法

ALTER TABLE tab_large add col_new Number(9) Default 1;

该语句会对所有记录进行填值操作,对于现场tab_large中存在3000W 条左右

数据,该步骤需要执行数小时。

可以将该语句改为:

ALTER TABLE tab_large add col_new Number(9);

ALTER TABLE tab_large modify col_new number(9) default 1;

该语句只会对新增的记录进行填值操作,只需要数秒。

如果需要对原来的值进行操作,可以在升级后进行update 操作,这样能够节

省大量的升级时间。

修改表增加字段默认值default

2013-09-28 10:11:51 我来说两句 作者:海鲨Oracle

收藏 我要投稿

修改表增加字段默认值default

对个生产库的表增加1个字段. 字段类型是INT 型, 表数据有2千万条,

?

1 a lter table table_name add xxoo number(4) default 0 ;

因此 不仅要修改字典, 还要刷新全部数据.

1) 在ALTER sql中有带缺省值,ORACLE 会直接刷新全部的记录。

2) 在ALTER sql中没有带缺省值,ORACLE 只会影响到后来的记录。

?

1 alter table table_name add xxoo number(4) default null;

2 Table altered

3

4 Executed in 0.062 seconds

带有default null 就可以了

?

1 alter table table_name add xxoo number(4) default 0;

2

3 Table altered

4 Executed in 1.625 seconds

原来的话 要更新所有的行, 会导致UNDO 段占用

使用语句Alter table a add test number(10) default 0;更新一个大表中字段时,表有四个分区,数据达到几十亿行,增加一个字段竟然要几个小时的时间,修改语句加上Nologging ,怎么没有作用呢?去找是不是哪有锁了呢,使用语句 select *

from dba_locks where lock_id1=33784;发现Session_id为14的一直在执行,那么他在执行什么呢!查询一下吧。 使用语句:

?

select a.sid,a.username,c.SQL_TEXT from v$session a, dba_locks b,v$sqlarea c 2 where b.lock_id1=33784 and a.SID=b.session_id 3 and a.SQL_ADDRESS=c.ADDRESS; 1

哦,原来他在Update Test 字段值为0. 至此总结到,原来Alter 之后做的竟然是Update ,也明白了为什么Undo 表空间会爆涨。去掉Default 0,呵呵,很快就OK 了。

建议没有必要时慎用Default

添加具有默认值的列

尽管对该特性感到满意,Jill 还在考虑与第一个问题相关的另一个问题。她希望添加 TAX_CODE 列,但该列不能为空。显然,当她向非空表添加非空列时,还必须指定默认值“XX”。因此,她编写了以下 SQL :

alter table sales add tax_code varchar2(20) default 'XX' not null;

但她在这里停下了。SALES 表十分巨大,大约有 4 亿行。她知道,在执行该语句时,Oracle 会立即添加该列,但在将控制权返回给她之前将更新所有行中的值“XX”。更新 4 亿行不仅要花费很长时间,还要填充还原段、生成大量重做任务并产生极大的性能开销。因此,Jill 必须在“安静时段”(即,停机期间)才能进行此更改。Oracle 数据库 11g 中有更好的方法吗?

当然有。上述语句将不会对表中的所有记录执行更新。尽管对于列值将自动设为“XX”的新记录来说,这不是问题,但当用户选择现有记录的该列时,这将返回 NULL ,是吗?

实际上并非如此。当用户选择现有记录的列时,Oracle 将从数据字典获取默认值并将其返回给用户。这样,您就实现了一箭双雕:可以将一个新列定义为非空并具有默认值,同时不会导致任何重做和还原开销。真棒!

oracle 中针对大表增加有默认值的字段的操作方法

ALTER TABLE tab_large add col_new Number(9) Default 1;

该语句会对所有记录进行填值操作,对于现场tab_large中存在3000W 条左右

数据,该步骤需要执行数小时。

可以将该语句改为:

ALTER TABLE tab_large add col_new Number(9);

ALTER TABLE tab_large modify col_new number(9) default 1;

该语句只会对新增的记录进行填值操作,只需要数秒。

如果需要对原来的值进行操作,可以在升级后进行update 操作,这样能够节

省大量的升级时间。


相关文章

  • ALTER TABLE(修改表结构命令)
  • ALTER TABLE(修改表结构命令): ALTER TABLE(修改表结构命令): 对表结构的操作,我们主要分两部分讨论,即针对字段和针对索引的操作. 表结构修改 之 对字段操作 1.给表怎加增加字段 其命令格式是: alter tab ...查看


  • 新建,删除,修改表结构的SQL语句
  • SQl 语句(常见) 新建, 删除, 修改表结构 新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIMARY KEY , [字段1] nVarChar(50) default ' ...查看


  • 完整性(二)
  • 数据完整性理论(二) ● 规则 ● 默认 1. 规则 规则(RULE)是一种数据库对象,作用是向表中的列插入数据时,指定该列接受数据值的范围. 特点: 1)规则要在insert和update语句之前给出. 2)规则与其作用的表是相互独立的, ...查看


  • vfp常用命令
  • 本资料所用到的表及其结构如下: 图1 学生表.dbf 结构 图2 选课表.dbf 结构 图3 课程表.dbf 结构 1.设置工作目录:set default to set default to 设置vfp 系统默认的工作目录 (文件夹) , ...查看


  • mysql语句大全
  • 1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1) mysqldump -u wcnc -p smgp_ ...查看


  • 软件设计方案(案例)
  • 软件设计方案 用户界面设计规范 用户界面:又称人机界面,实现用户与计算机之间的通信,以控制计算机或进行用户与计算机之间的数据传送的系统部件. GUI:即图形用户界面,一种可视化的用户界面,它使用图形界面代替正文界面. 本系统坚持图形用户界面 ...查看


  • 数据库学习总结
  • 目 录 目 录 ................................................................................................................ ...查看


  • 数据库表之间的联系
  • 数据库表之间的联系 表之间的关系主要有三种:一对一,一对多,多对多.VFP 支持前两种. 理解好"表之间的关系主要要掌握好主关键字和外部关键字",如果两张表都具有相同的主关键字,则认为它们具有"一对一" ...查看


  • 数据库原理及应用(答案已补全)
  • <数据库原理及其应用>模拟题1 一.选择题 1.( D )在下列表达式中,计算结果为字符型的是: A .1234+ASC("A ") B. SQRT(4)*12/24/60 C .CTOD("12/ ...查看


热门内容