oracle语句速查(2)


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;


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3