Oracle之列的添加、删除和修改

来源:互联网 发布:淘宝跨店满减怎么用 编辑:程序博客网 时间:2024/06/06 11:42
Oracle之列的添加、删除和修改
2010-10-21 15:47

1、添加列

语法:ALTER TABLE table_name ADD(new_column_name datatype[DEFAULT value] [NOT NULL]);
例子:ALTER TABLE employee ADD(phone VARCHAR2(10),hiredate DATE DEFAULT SYSDATE NOT NULL);

注意:为表添加列时应注意,如果表中已经有数据,那么新列不能用NOT NULL约束,除非为新列设置缺省值,在默认情况下,新插入列的值为NULL。

2、修改列类型

语法:ALTER TABLE table_name MODIFY column_name new_datatype;
举例:ALTER TABLE employee MODIFY ename CHAR(20);

注意:
可以增大字符类型列的长度和数值类型列的精度;
如果字符类型列、数值类型列中的数据满足新的长度、精度,则可以缩小类型的长度、精度;
如果不改变字符串的长度,可以将VARCHAR2类型和CHAR类型转换;
如果更改数据类型为另一种非同系列类型,则列中数据必须为NULL。

3、修改列名

语法:ALTER TABLE table_name RENAME COLUMN oldname TO newname;
举例:ALTER TABLE employee RENAME COLUMN ename TO employee_name;

4、删除列

当某些列不再需要时,可以将其删除。但是不能将表中所有列删除。删除列的方法有两种,一种是直接删除,另一种是将列先标记为UNUSED,然后进行删除。

直接删除列:可以使用ALTER TABLE DROP COLUMN语句直接删除列。可以删除一列或多列,同时删除与列相关的索引和约束。如果删除的列是一个多列约束的组成部分,则必须使用CASCADE CONSTRAINTS选项。


例子:删除employess表中的sno,phone,hiredate列,语句为:
ALTER TABLE sc DROP COLUMN sno CASCADE CONSTRAINTS;
ALTER TABLE employee DROP(phone,hiredate);

将列标记为UNUSED状态:删除列时,将删除表中每个记录的相应列值,同时释放存储空间。因此,如果要删除一个大的表中的列,由于需要对每个记录进行处理,并写入重做日志文件,需要很长的处理时间。为了避免在数据库使用高峰期间由于删除列的操作而占用过多的资源,可以暂时将列置为UNUSED状态。将列标记为UNUSED状态使用ALTER TABLE SET UNUSED语句。对用户来说,被标记为UNUSED状态的列像被删除了一样,无法查询该列,但实际上该列仍然存在,并占用存储空间。可以在数据库空闲时,使用ALTER TABLE DROP UNUSED COLUMNS语句删除处于UNUSED状态的所有列。

例子:将employee表中sage、sname、resume列设置为UNUSED状态
ALTER TABLE player SET UNUSED COLUMN sage;
ALTER TABLE player SET UNUSED COLUMN (sname,resume);
ALTER TABLE player DROP UNUSED COLUMNS;