oracle语句速查:修改表结构
来源:优易学  2011-11-9 15:56:08   【优易学:中国教育考试门户网】   资料下载   IT书店

  3修改表结构

  修改表结构是对已经创建完成(实际是存放在数据库字典里)的表的结构进行修改。不同的Oracle版本允许对表的修改也不一样。新版的Oracle8i可以对表中的列进行删除。

  3.1 修改表结构命令修改表结构的命令由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可以作的操作有:

  l增加一个列(字段)宽度;

  l减少一个列(字段)宽度(该列必须无数据);

  l增加一个列(字段);

  l修改列的定义;

  l    或一个限制;(如数据类型,NOT NULL);仅当某列的值为空时才能修改其类型;

  l去掉限制;

  l修改存储分配;

  l记录表已作过BACKUP;

  l删除已存在的列(仅Oracle8i及以后版本);

  l重新定位和组织表(仅Oracle8i及以后版本);

  l    将表标识为不可用(仅Oracle8i及以后版本)。

  3.2  修改表结构例子

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

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

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

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

  如果被修改的列没有空(已有数据),则被提示:

  ORA-01439: Column to be modified must be empty to change

  datatype

  ORA-01441: Column to be modified must be empty to decrease

  column length

  例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的新功能,可以实现:

  l将未分区的表从一个表空间移到另一个表空间;

  l    重新组织一个未分区表的存储。

  它的基本语法为:

  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允许用户对表的结构进行修改。但建议你在工作中不要采用方式。因为表结构被多次修改会影响应用系统的性能。

  3.3 删除表结构Oracle提供DROP TABLE命令可以实现删除表数据和结构。提醒初学者,不要轻易使用DROP TABLE命令。DROP TABLE 命令语法:DROP TABLE [user.]table_name[CASCADE CONSTRAINTS] CASCADE CONSTRAINTS表示所有指向本表的主键,外部键被删掉。当删除一个表时,下面的对象也随之被删掉。

  l表的索引;

  l指向本表的外部键;

  l本表的触发器;

  l本表中的分区;

  l本表的快照;

  l本表的角色和用户权限;

  l    加在本表的所有限制。

  提示:如果你在定义表结构时,采用了主键、外部键来定义了一序列表。则在删除表结构时要小心。不要轻易用CASCADE子句。

  3.4 使用CHECK作限制约束Oracle提供了一个很有用的子句CHECK,它可以实现对数据的自动检查。它的用法是在创建表结构时使用。如:

  本文出自 51CTO.COM技术博客

  上一篇 138端口解析  下一篇 java: cannot execute binary file 如果遇到这..

  类别:数据库系列┆技术圈(0)┆阅读(9)┆评论(1)┆推送到技术圈┆返回首页

  文章评论

  [1楼] jxwpx

  2009-11-05 10:06:21

  Create table worker

  (   empno   number(4)   primary   key,

  name     varchar2(10),

  age     number(2)   CHECK(age   between 18   and   65 ),

  /* age number(2) CHECK( age >=18 and age<=65 ) */

  lodging char(15) References LODGING(lodging)

  );

  Create table emp3

  (   empno     number(4) constraint abc   primary   key,

  ename     varchar2(10),

  job     varchar2(10),

  sex     char(2) check ( sex=‘男’ or sex=‘女’),

  mgr     number(4),

  hiredate   date,

  sal     number(7,2), /*工资 */

  comm     number(7,2), /*奖金 */

  deptno   number(2),

  CHECK ( sal+comm >0 and sal+comm<=5000 )

  );

  建议:在设计数据库表结构时,建议你分析用户的数据的取值范围,从而将那些取值范围一定的字段用CHECK进行描述。以保证以后数据的正确性。

  3.5 使用UNRECOVERABLE创建表

  对于特殊的需要,可以考虑将表创建成为不需恢复(UNRECOVERABLE)的表。如复制一个已存在的表就可以采用这种方法以减少系统的开销。如:

  例:参考emp表创建一个新的emp_new表:

  SQL> create table new_emp as select * from emp UNRECOVERABLE;

  表已创建。

  或

  CREATE TABLE new_emp AS select * from emp NOLOGGING;

  注:虽然上面提到UNRECOVERABLE,但是Oracle推荐你使用NOLOGGING或LOGGING;

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训