Oracle数据库的的重要部分就是数据字典。它是存储在数据库中的所有对象信息的知识库,Oracle数据库管理系统使用数据字典获取对象信息和安全信息,而用户和DBA用它来查阅数据库信息。数据字典保存数据对象和段的信息,它是存放在System表空间的只读对象,不允许任何人对其修改。数据词典中保存的数据库对象包括:用户,角色,表空间,表,视图,簇,类型,同义词,序列,索引,数据库连接,存储过程,函数,包,触发器等。Oracle将这些数据库对象组合到一个称为Schema的集合中。一个Schema只能被一个数据用户所拥有,并且Schema的名称与这个用户的名称相同。本文简单介绍了表,序列,视图等常用数据库类型,其他的会在后续文章中介绍。
1、表
在Oracle中表的概念以及创建,删除,修改表的语法与其他数据库基本相同。但是Oracle数据库表的数据类型与其他数据库管理系统中的表数据类型有所不同。表1.1中列出了Oracle数据库表中列的数据类型。
表1.1 Oracle数据库表中列的数据类型
数据类型 | 描述 |
char | 存储固定长度的肥Unicode字符数据,最大长度2000字节 |
varchar2 | 存储可变长度的字符数据,最大长度4000字节 |
nchar | 存储固定长度的Unicode字符数据,最大长度2000字符 |
nvarchar | 存储可变长度的Unicode字符数据,最大长度4000字符 |
byte | 存储1个个字节的数据 |
long | 存储可变长度的字符数据,最大长度2GB |
number decimal numberic | 三者等价。存数所类型的数字,包括固定和浮点,正数和负数,零。所有的数字类型本质上都是number类型,但是精度和小数位数不同,直接使用时,number取值范围可以是10E38~10E126-1 |
integer,smallint | 二者等价,存储范围为-10E38~10E38的整数 |
float,real | 存储范围为-10E38~10E38的浮点精度数字数据 |
double precision | 存储126位二进制精度的浮点精度数字数据 |
bfile | 存储长度大于4GB外部二进制文件的一个指针 |
BLOB | 存储二进制大对象,最大长度4GB |
long raw | 存储纯二进制数据,最大长度2GB |
raw | 存储纯二进制数据,最大长度2000字节 |
CLOB | 存储单字节字符数据,最大长度4GB支持固定和可变宽度的字符集 |
NCLOB | 是COLB的Unicode等价物 |
rowid | 存储一个十六进制字符串值,代表一行在表中的地址 |
urowid | 存储一个十六进制字符串值,代表一行在表中按照索引排序的逻辑地址 |
date | 存储在公元前01/01/4712到公元后12/31/9999的日期和时间数据 |
timestamp | 用于代表一个日期的年,月,日,时分秒部分 |
interval year to month | 以年或者月存储两个日期之间的时间段 |
interval day to second | 以天,时间,分钟,秒存储两个时间的间隔 |
2、视图
视图(VIEW)是从一个或多个表中通过查询语句生成的一种虚表。可以认为视图就是一个查询语句的结果,只不过类似于表的形式保存在数据库中。视图和他下层的基础表不同,它是一个虚表,即视图所对应的数据不实际存储在数据库中,数据库中只存数视图的定义。
使用视图可以达到以下的目的:
- 将用户的注意力集中到特定的数据上,以达到保护数据安全的目的。因为视图可限制用户从表中所检索的内容,而不是表中存储的所有数据。
- 简化了数据的查询和处理操作,数据库开发人员可把相关的内容设计到一个视图中,使用户在查询和处理数据是可以想处理表一样简单,而不是用编写复杂的查询语句,此外,通过使用比复杂数据库中使用的名字更容易理解的名字,用户可以看得更友好的数据显示。
- 有利于数据交换操作。我们可以通过定义一个视图,把需要交换的数据集中到一个视图中,从而简化数据交换操作。
- 有利于简化对用户权限的管理。数据库所有者可以授权让其他的用户可以通过视图来查询数据,而不是限制用户查询基础表中特定列的权限,这样可以使得在更改基础表设计时可以不影响用户的查询。
3、同义词
在开发数据库应用程序时,应当普遍遵守的规则是尽量避免直接引用表、视图或者其他数据库对象。否则,到DBA对数据库对象进行修改变变动后,比如改变表的名称,表的结构等,就必须更新并重新编译应用程序。Oracle使用了同义词(synonym)解决了这个问题。
同义词即数据库对象的别名。在Oracle中可以创建两种同义词:
- 公有同义词:由一个特殊的用户组PUBLIC所拥有,数据库表中的所有用户都可以使用公有同义词。
- 私有同义词:有创建它的用户或者Schema所拥有,用户可以控制其他用户是否有权使用属于自己的私有同义词。
4、序列
序列(Sequence)是Oracle中的一直特殊对象,它可以给应用程序基本连续并唯一的数值,序列用于实现数据库表的主键列的自动增长。
创建序列的语法形式为:
create sequence 序列名 increment by 增量种子 start with 起始数字 maxvalue 最大值;
表DUAL是一个特殊的表,它只有一行一列,列的名称是虚拟的,数据类型为char(1)。当我们想快速获取与特定的表无关,但是跟外部来源或者函数有关的信息时,就要使用这个表。例如查询序列的当前值,使用段dual表的另一个示例是 select sysdate from dual 获取当前时间,或者计算类似 select power (2.5) from dual 这样的数学函数。