(1)添加列
使用ALTER TABLE...ADD...向表中添加列,其语法为:ALTER TABLE[模式名.]表名
ADD(列名1数据类型[DEFAULT默认值],列名2数据类型[DEFAULT默认值],…);
其中的列定义与CREATE TABLE语句中相同,这里不再介绍。
例如,下面代码向表books添加两列(销售数量和出版日期):
(2)添加虚拟列
在Oracle Database 11g中增加了一个新的特性——虚拟列,虚拟列通过引用表中的其他列来计算结果,而其中的数据却没有真正地被保存在数据文件中。
例如,在scott用户中,按照表9.3的结构创建订单信息表orders。
表9.3 订单信息表orders
创建表orders的SQL语句如下:
在orders表中插入数据:
此时,如果用户希望用orders表中的qty列值将一个订单的销量情况分为高、中、低3档。此时,只需为orders表添加一个虚拟列,就可以实现这样的操作。
下面向orders表中插入数据并查询,即可看到新增加的虚拟列qty_category及其列值。
使用虚拟列时应该注意:
①虚拟列可以用在UPDATE和DELETE的WHERE语句中,但不能被DML语句修改。
②可对虚拟列进行统计。
③可以对虚拟列创建索引。
④可以对虚拟列创建主键约束。
⑤虚拟列计算公式不能参考其他的虚拟列。
(3)修改列的类型及长度
可以使用ALTER TABLE…MODIFY…语句对列的类型或长度进行修改,其语法为:
ALTER TABLE[模式名.]表名MODIFY列名数据类型;
例如,下面代码把books表中booknum列的数据长度修改为15个字节。
修改列数据类型及长度时应该注意:
①可以增大字符类型列的长度和数值类型列的精度。
②只有在表中没有任何数据时才可以减小列的长度和降低数值类型列的精度。
③把列数据类型更改为另一种不同系列的类型时,则列中数据必须为空。
④不能修改虚拟列的数据类型。
(4)修改列名
使用ALTER TABLE...RENAME...语句修改列的名称,其语法格式为:
ALTER TABLE[模式名.]表名RENAME COLUMN原列名TO新列名;
例如,下面代码把orders表中虚拟列qty_category的名称修改为qty_cat。(www.daowen.com)
修改列名时应该注意:如果表中的列已被虚拟列表达式使用,则不能再重命名该列。例如,orders表中的虚拟列表达式中引用了qty列,所以不能再重命名qty列。
(5)删除列
当不再需要某些列时,可以使用ALTER TABLE…DROP…语句将其删除。具体删除的方法有两种,一种是直接删除,另一种是将待删除的列先标记为UNUSED,然后再删除。
1)直接删除列
使用ALTER TABLE…DROP COLUMN…语句删除,其语法为:
ALTER TABLE[模式名.]表名
DROP COLUMN列名|(列名1,列名2,...)
[CASCADE CONSTRAINTS|INVALIDATE];
其中:
①CASCADE CONSTRAINTS子句说明在删除列的同时,删除与这些列相关的约束,如果被删除的列是多列约束的组成部分,则必须使用该子句。
②INVALIDATE子句说明在删除列的同时,将与该列有约束关系的列置为不可用状态。
例如,下面代码删除orders表中的qty_cat列。
2)将待删除的列先标记为UNUSED,然后再删除
对于比较大的表,直接删除其中的列时,由于需要对每个记录进行处理,并写入重做日志文件,这样需要较长的处理时间。为了避免占用过多的系统资源,可以先将待删除的列标记为UNUSED,等到空闲时再使用ALTER TABLE...DROP UNUSED COLUMNS语句来删除列。
使用ALTER TABLE设置UNUSED列的语法格式为:
ALTER TABLE[模式名.]表名
SET UNUSED COLUMN列名|(列名1,列名2,...)
[CASCADE CONSTRAINTS|INVALIDATE];
例如,下面代码将表books中booktime、bookprice列设置为UNUSED状态,然后再删除。
需要注意的是,标记为UNUSED的列依然存在,并占用存储空间,但是用户不能查询该列。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。