`
digyso
  • 浏览: 142160 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Oracle数据库数据对象分析(上)

阅读更多
Oracle数据库数据对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器等。对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数据库对象是学习Oracle的捷径。

  表和视图

  Oracle中表是数据存储的基本结构。ORACLE8引入了分区表和对象表,ORACLE8i引入了临时表,使表的功能更强大。视图是一个或多个表中数据的逻辑表达式。本文我们将讨论怎样创建和管理简单的表和视图。

  管理表

  表可以看作有行和列的电子数据表,表是关系数据库中一种拥有数据的结构。用CREATE TABLE语句建立表,在建立表的同时,必须定义表名,列,以及列的数据类型和大小。例如:

CREATE TABLE products
  ( PROD_ID NUMBER(4),
   PROD_NAME VAECHAR2(20),
   STOCK_QTY NUMBER(5,3)
  );

  这样我们就建立了一个名为products的表, 关键词CREATE TABLE后紧跟的表名,然后定义了三列,同时规定了列的数据类型和大小。

  在创建表的同时你可以规定表的完整性约束,也可以规定列的完整性约束,在列上普通的约束是NOT NULL,关于约束的讨论我们在以后进行。

  在建立或更改表时,可以给表一个缺省值。缺省值是在增加行时,增加的数据行中某一项值为null时,oracle即认为该值为缺省值。

  下列数据字典视图提供表和表的列的信息:

   . DBA_TABLES
   . DBA_ALL_TABLES
   . USER_TABLES
   . USER_ALL_TABLES
   . ALL_TABLES
   . ALL_ALL_TABLES
   . DBA_TAB_COLUMNS
   . USER_TAB_COLUMNS
   . ALL_TAB_COLUMNS

  表的命名规则

  表名标识一个表,所以应尽可能在表名中描述表,oracle中表名或列名最长可以达30个字符串。表名应该以字母开始,可以在表名中包含数字、下划线、#、$等。

  从其它表中建立表

  可以使用查询从基于一个或多个表中建立表,表的列的数据类型和大小有查询结果决定。建立这种形式的表的查询可以选择其他表中所有的列或者只选择部分列。在CREATE TABLE语句中使用关键字AS,例如:

SQL>CREATE TABLE emp AS SELECT * FROM employee

TABLE CREATED

SQL> CREATE TABLE Y AS SELECT * FROM X WHERE no=2

  需要注意的是如果查询涉及LONG数据类型,那么CREATE TABLE....AS SELECT....将不会工作。

  更改表定义

  在建立表后,有时候我们可能需要修改表,比如更改列的定义,更改缺省值,增加新列,删除列等等。ORACLE使用ALTER TABLE语句来更改表的定义

  1、增加列

  语法:

ALTER TABLE [schema.] table_name ADD column_definition

  例:

ALTER TABLE orders ADD order_date DATE;

TABLE ALTER

  对于已经存在的数据行,新列的值将是NULL.

  2、更改列

  语法:

ALTER TABLE [schema.] table_name MODIFY column_name new_attributes;

  例:

ALTER TABLE orders MODITY (quantity number(10,3),status varchar2(15));

  这个例子中我们修改了表orders,将STATUS列的长度增加到15,将QUANTITY列减小到10,3;

  修改列的规则如下:

   . 可以增加字符串数据类型的列的长度,数字数据类型列的精度。

   . 减少列的长度时,该列应该不包含任何值,所有数据行都为NULL.

   . 改变数据类型时,该列的值必须是NULL.

   . 对于十进制数字,可以增加或减少但不能降低他的精度。

  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 [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子串。

SQL> CREATE VIEW TOP_EMP
(EMPLOYEE_ID,EMPLOYEE_NAME,SALARY) AS
SELECT empno ,ename ,salary
FROM emp
WHERE salary >2000

  如果在创建的视图包含错误在正常情况下,视图将不会被创建。但如果你需要创建一个带错误的视图必须在CREATE VIEW语句中带上FORCE选项。如:

CREATE FORCE VIEW ORDER_STATUS AS
SELECT * FROM PURCHASE_ORDERS
WHERE STATUS='APPPOVE';

SQL>/

warning :View create with compilation errors

  这样将创建了一个名为ORDER_STATUS的视图,但这样的视图的状态是不合法的,如果以后状态发生变化则可以重新编译,其状态也变成合法的。

  从视图中获得数据

  从视图中获得数据与从表中获得数据基本一样,用户可以在连接和子查询中使用视图,也可以使用SQL函数,以及所有SELECT语句的字串。

  插入、更新、删除数据

  用户在一定的限制条件下可以通过视图更新、插入、删除数据。如果视图连接多个表,那么在一个时间里只能更新一个表。所有的能被更新的列可以在数据字典USER_UPDATETABLE_COLUMNS中查到。

  用户在CREATE VIEW中可以使用了WITH子串。WITH READ ONLY子串表示创建的视图是一个只读视图,不能进行更新、插入、删除操作。WITH CHECK OPTION表示可以进行插入和更新操作,但应该满足WHERE子串的条件。这个条件就是创建视图WHERE子句的条件,比如在上面的例子中用户创建了一个视图TOP_EMP,在这个视图中用户不能插入salary小于2000的数据行。

  删除视图

  删除视图使用DROP VIEW命令。同时将视图定义从数据字典中删除,基于视图的权限也同时被删除,其他涉及到该视图的函数、视图、程序等都将被视为非法。

  例:

DROP VIEW TOP_EMP;
分享到:
评论

相关推荐

    Oracle数据库数据对象分析

    北京火龙果软件工程技术中心 Oracle数据库数据对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器等。对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数据库对象是学习...

    Oracle数据库对象管理及备份与恢复.pdf

    本文将详细介绍Oracle数据库的对象管理、数据类型、触发器、索引和分区策略,以及备份与恢复的相关知识。 首先,关于Oracle数据库对象管理,主要包括创建和修改表结构、管理索引、维护表分区、创建和管理视图及序列...

    利用Java程序实现Oracle数据库中大对象的存取.pdf

    程序执行功能的简单说明:在客户端的浏览器界面上输入一个客户端的文件名(本文以pdf类型文件为例),将该文件的全部内容做为一个大对象的数据存储在服务器端的Oracle数据库中。任何一个客户端都可以通过浏览器再次...

    Oracle数据库大对象数据存取的两种实现方法及时间性能比较.pdf

    标题中的“Oracle数据库大对象数据存取的两种实现方法及时间性能比较”指的是在Oracle数据库中处理大对象(LOB)数据的两种不同方法,并对比它们的性能。Oracle数据库中的大对象数据通常指的是非结构化的数据,如...

    Oracle数据库体系结构( 中文详细版)

    1. **数据文件**(Data Files):数据文件是Oracle数据库存储实际数据的地方,包含了表、索引、视图等对象的数据。每个表空间由一个或多个数据文件组成,每个数据文件中包含一系列的数据块,这是Oracle数据存储的...

    oracle数据库管理的一组经典文档

    4. **数据对象分析**:`Oracle数据库数据对象分析(中).doc`和`Oracle数据库数据对象分析.doc`可能详细阐述了如何分析和理解Oracle中的表、视图、索引、存储过程等数据对象,以及如何优化查询性能。这在数据库设计...

    Oracle数据库认证大师

    在Oracle数据库中,undo指保留了数据变更前的状态,以便于恢复操作和多版本读取一致性。参数undo_management指明了undo管理的方式,AUTO表示数据库自动管理undo表空间。undo_retention参数定义了undo数据保留的时间...

    Oracle数据库系统应用与开发

    Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统之一,它在企业级数据管理和应用程序开发中扮演着核心角色。本资源“Oracle数据库系统应用与开发”深入探讨了Oracle数据库的使用和开发技术,特别关注...

    oracle数据库连接工具

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,用于存储、管理和检索复杂的数据。为了与Oracle数据库进行交互,我们需要可靠的连接工具。"Oracle数据库连接工具"指的是可以方便地连接到Oracle数据库并执行...

    Oracle数据库试题100题(附答案)

    Oracle提供的Export和Import工具,可以在不同硬件平台上的Oracle数据库之间传递数据。这在数据迁移和备份过程中非常重要。数据的导出和导入是数据库管理员日常工作中经常遇到的操作。 在数据库管理中,Oracle数据库...

    C#版Oracle数据库通用操作类

    - 提供了将哈希表中的数据自动插入到 Oracle 数据库的功能,这通常用于批量数据导入场景。 - **参数化查询** - 支持参数化 SQL 语句,从而增强安全性并减少 SQL 注入风险。 - **事务处理** - 实现了事务控制机制...

    Oracle数据库学习课件

    1. **Oracle数据库基础**:首先,你会了解到数据库的基本概念,如数据模型(层次、网络、关系)、关系数据库理论,以及Oracle数据库系统的特点和优势。此外,还会介绍Oracle数据库的安装、配置和初始化过程。 2. **...

    Oracle数据库数据字典

    综上所述,Oracle数据库数据字典是数据库管理和维护的关键工具,掌握如何有效地利用和查询数据字典对于任何Oracle DBA或开发者来说都是至关重要的。通过深入理解和实践,可以提升对数据库系统的掌控力,从而更好地...

    查询oracle数据库数据的一款简单工具

    这款名为"Golden32 v5.7.445"的工具就是专为查询Oracle数据库数据设计的轻量级应用。 Golden32是一款简洁易用的数据库管理工具,它允许用户通过简单的界面直接连接到本地或远程的Oracle数据库。这个工具的核心功能...

    oracle示例数据库OT_oracle数据库

    这个压缩包包含了一些关键文件,帮助用户了解Oracle数据库的结构、数据操作以及用户管理。 1. **ot_data.sql**: 这个文件通常包含了示例数据库的初始数据。当你在新的Oracle环境中导入此脚本时,它会填充各种表和...

    图片批量导入oracle数据库

    本话题聚焦于如何批量导入图片到Oracle数据库,这是一种常见的需求,特别是在处理大量图像数据的项目中。Oracle数据库作为一款强大的关系型数据库管理系统,支持多种类型的数据存储,包括BLOB(Binary Large Object...

    ORACLE数据库备份用bat脚本

    综上所述,通过编写bat脚本结合Java的定时任务功能,我们可以实现Oracle数据库的自动备份,确保数据的安全性和可恢复性。这种方法既方便又高效,尤其适合那些需要定期备份大量数据的大型企业或组织。在实际应用中,...

Global site tag (gtag.js) - Google Analytics