修改表结构 删除列

 ORACLE中2种删除列的方法
alter table qq drop column TIME
alter table qq set unused ("TIME") cascade constraints;(注意TIME为字段名,要大写)

第一个命令直接删除一个列,适合应付比较小的表,
第二个命令将一个列标识为unused
然后在系统负载比较轻的时候使用
alter table drop unused columns
删除该列占用的存储空间。
可以使用参数指定一次删除多少行
适合负载比较重,或者表比较大的情况


修改表结构的命令由ALTER TABLE来完成。该命令的参数较多,下面仅给出一些基本的部分。详细请参考《ORACLE8i SQL REFERENCE》 。

ALTER   TABLE   [user.]   table
[ADD   ({colum_element|table_constraint}
        [,{column_element|table_constraint}]...)]
[MODIFY(column_element[,column_element]...)]
[DROP   CONSTRAINT   constraint]...
[PCTFREE   integer][PCTUSED   integer]
[INITRANS   integer][MAXTRANS   integer]
[STORAGE   storage]
[BACKUP]

ALTER TABLE 可以作的操作有:

增加一个列(字段)宽度;
减少一个列(字段)宽度(该列必须无数据);
增加一个列(字段);
修改列的定义 ;
或一个限制;(如数据类型,NOT NULL);仅当某列的值为空时才能修改其类型;
去掉限制;
修改存储分配;
记录表已作过BACKUP;
删除已存在的列(仅Oracle8i及以后版本);
重新定位和组织表(仅Oracle8i及以后版本);
将表标识为不可用(仅Oracle8i及以后版本)。

例1:对已经存在的表增加一新的列:

SQL>alter   table   dept   add   ( headcount   number(3) );

例2:对表的列修改其大小:

SQL>alter   table   dept   modify( Dname   char(20) );

例3:复制一个表:

CREATE  TABLE  HOLD_TANK  AS  SELECT  TANK_NO, CHIEF_CARETAKER_NAME FROM TANK;

例4:参照某个已存在的表建立一个表结构(不需要数据)

create table emp2 as select * from emp where rownum<1;

例5:修改已存在表存储参数:

Alter  table emp2  storage( next 256k pctincrease 0 );

例6:删除表中的列:

这是Oracle8i的新功能,它的基本语法为:

ALTER TABLE . . .  . . . DROP COLUMN [ CASCADE CONSTRAINTS ];

如:
Alter  table emp   drop column comm ;

例7:重新定位和组织表:

这是Oracle8i的新功能,可以实现:
将未分区的 表从一个表空间移到另一个表空间;
重新组织一个未分区表的存储。
它的基本语法为:

ALTER TABLE . . .  . . . MOVE TABLESPACE ;

如:
Alter  table emp   move  tablespace  users;

例8:将表标识为不可用:

这是Oracle8i的新功能,可以实现对空间的收回等。

基本语法为:

ALTER TABLE . . .  . . . SET  UNUSED COLUMN;

如:
Alter  table emp   set  UNUSED COLUMN xyz;

 

你可能感兴趣的:(oracle)