3、删除数据列
优化ORACLE数据库,唯一的方法是删除列,重新建立数据库。在ORACLE8i中有很多方法删除列,你可以删除未用数据列或者可以标示该列为未用数据列然后删除。
删除数据列的语法是:
ALTER TABLE [schema.] table_name DROP
{COLUM column_names | (column_names)}[CASCADE CONSTRAINS]
要注重的是在删除列时关于该列的索引和完整性约束也同时删除。注重要害字CASCADE CONSTRAINS,假如删除的列是多列约束的一部分,那么这个约束条件相对于其他列也同时删除。
假如用户担心在大型数据库中删除列要花太多时间,可以先将他们标记为未用数据列,标记未用数据列的语法如下:
ALTER TABLE [schema.] table_name SET UNUSED
{COLUM column_names | (column_names)}[CASCADE CONSTRAINS]
这个语句将一个或多个数据列标记为未用数据列,但并不删除数据列中的数据,也不释放占用的磁盘空间。但是,未用数据列在视图和数据字典中并不显示,并且该数据列的名称将被删除,新的数据列可以使用这个名称。基于该数据列的索引、约束,统计等都将被删除。
删除未用数据列的语句是:
ALTER TABLE [schema.] table_name DROP
{UNUSED COLUM | COLUMN CONTINUE}
删除表和更改表名
删除表非常简单,但它是一个不可逆转的行为。
语法:
DROP TABLE [schema.] table_name [CASCADE CONSTRAINTS]
删除表后,表上的索引、触发器、权限、完整性约束也同时删除。ORACLE不能删除视图,或其他程序单元,但oracle将标示他们无效。假如删除的表涉及引用主键或唯一要害字的完整性约束时,那么DROP TABLE语句就必须包含CASCADE CONSTRAINTS子串。
更改表名
RENAME命令用于给表和其他数据库对象改名。ORACLE系统自动将基于旧表的完整性约束、索引、权限转移到新表中。ORACLE同时使所有基于旧表的数据库对象,比如视图、程序、函数等,为不合法。
语法:
RENAME old_name TO new_name;
例:
SQL> RENAME orders TO purchase_orders;
TABLE RENAMED
截短表
TRUNCATE命令与DROP命令相似, 但他不是删除整个数据表,所以索引、完整性约束、触发器、权限等都不会被删除。缺省情况下将释放部分表和视图空间,假如用户不希望释放表空间,TRUNCATE语句中要包含REUSE STORAGE子串。TRUNCATE命令语法如下:
TRUNCATE {TABLE|CLUSTER} [schema.]
name {DROP|REUSE STORAGE}
例:
SQL> TRUNCATE TABLE t1;
TABLE truncate.
治理视图
视图是一个或多个表中的数据的简化描述,用户可以将视图看成一个存储查询(stored query)或一个虚拟表(virtual table).查询仅仅存储在oracle数据字典中,实际的数据没有存放在任何其它地方,所以建立视图不用消耗其他的空间。视图也可以隐藏复杂查询,比如多表查询,但用户只能看见视图。视图可以有与他所基于表的列名不同的列名。用户可以建立限制其他用户访问的视图。
建立视图
CREATE VIEW命令创建视图,定义视图的查询可以建立在一个或多个表,或其他视图上。查询不能有FOR UPDATE子串,在早期的ORACLE8i版本中不支持ORDER BY子串,现在的版本中CREATE VIEW可以拥有ORDER BY子串。
例:
SQL> CREATE VIEW TOP_EMP AS
SELECT empno EMPLOYEE_ID,ename EMPLOYEE_NAME,salary
FROM emp
WHERE salary >2000
用户可以在创建视图的同时更改列名,方法是在视图名后立即加上要命名的列名。重新定义视图需要包含OR REPLACE子串。
评论加载中…
![]() |