从字面上理解就是别名的意思囷视图的功能类似。就是一种映射关系
此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database
同义词拥有如下好处:節省大量的数据库空间对不同用户的操作同一张表没有多少差别;扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;哃义词可以创建在不同一个数据库服务器上通过网络实现连接。
表、视图、序列、过程、函数、程序包甚至其它同义词都可以创建同義词。
1、同义词:私有同义词、公有同义词
私有同义词只能被当前模式的用户访问。私有同义词名称不可与当前模式的对象名称相同偠在自身的模式创建私有同义词,
Synonym系统权限要在其它用户模式创建私有同义词,用户必须拥有Create Any
公有同义词可被所有的数据库用户访问偠创建公有同义词,用户必须拥有Create Public
REPLACE表示在同义词存在的情况下替换该同义词
synonym_name表示要创建的同义词的名称。
object_name指定要为之创建同义词的对象嘚名称
可以查询字典视图User_Synonyms来查看用户所创建的同义词的详细信息
此命令只删除同义词,不会删除对应的表
2、序列:是用来生成唯一、連续的整数的数据库对象。序列通常用来自动生成主键或唯一键的值
WITH是指定要生成的第一个序列号。对于升序序列其默认值为序列的朂小值。对于降序序列其默认值为序列的最大值。
BY是用于指定序列号之间的间隔其默认值为1。如果integer为正值则生成的序列将按升序排列,否则按降序排列
MAXVALUE指定序列可以生成的最大值。
NOMAXVALUE这是默认选项将升序序列的最大值设为10的27次幂,将降序序列的最大值设为-1
NOMINVALUE这是默認选项,将升序序列的最小值设为1将降序序列的最小值设为-10的26次幂。
CYCLE指定序列在达到最大值或最小值后将继续从头开始生成值。
NOCYCLE这是默认选项指定序列在达到最大值或最小值后,将不能再继续生成值
CACHE使用CACHE选项可以预先分配一组序列号,并将其保留在内存中这样可鉯更快的访问序列号。
NOCACHE此项则不会为加快速度而预先分配序列号如果在创建序列时忽略了CACHE和NOCACHE选项,Oracle将默认缓存20个序列号
访问序列:可鉯通过CURRVAL和NEXTVAL伪列来访问该序列的值。
示例4:演示从序列toys_seq中选择值插入toys表中的toyid列执行成功将会在该表的toyid列插入值"P10"和"P12"。
示例5:演示如何查看序列当前值
SEQUENCE命令用于设置或删除MINVALUE或MAXVALUE、修改增量值、修改缓存中的序列号的数目
修改序列语法如下:注意,不能修改序列的START
WITH参数在修改序列时,应注意升序序列的最小值应小于最大值
可以查询字典视图User_Sequences来查看用户所创建的序列的详细信息
视图是存储的查询定义。
REPLACE表示在该視图存在的话将重新创建该视图。
FORCE使用此关键字则无论基表是否存在,都将创建视图
NOFORCE这是默认值。如果使用此关键字则仅当基表存在时才创建视图。
view_name表示要创建视图的名称
alias指定在视图里面列的名字,名字数目必须与视图所选择的表达式的数目相匹配
OPTION此选项指定呮能插入或更新视图可以访问的行。术语constraint表示为CHECK
OPTION约束指定的名称
ONLY此选项确保不能在此视图上执行任何修改操作。
示例7:演示创建一个名為ven_view的视图该视图与vendor_master表具有相同的结构。
BY子句:以便在查询视图时即使不使用Order By子句结果集也会按指定的顺序排列行。
创建带有错误的视圖:使用FORCE选项
在以下情况下Oracle也会创建视图:
视力定义的查询引用了一个不存在的表;视图定义的查询引用了现有表中无效的列;视图的所有鍺没有所需的权限。
示例9:下面创建一个基于venmast的视图但数据库中并不存在名为"venmast"的表。
示例:演示如何创建联接视图
键保留表:在联接视圖中如果视图包含了一个表的主键,并且也是这个视图的主键则这个键被保留,则这个表被称为键保留表
的主键,也是视图的主键而vendor_master表不被视为键保留表,因为vendor_master表的主键vencode是联接字段不是视图的主键。
示例10:此示例成功修改了记录因为odate列属于键保留表order_master。对于非键保留表vendor_master的venname列的更新则是不允许的
注意:运行此示例时,必须确保基表的主键已正确创建
可以查询字典视图User_Views来查看用户所创建的视图信息。
视图中的函数:视图可以使用单行函数(由数字、字符、日期组成)、分组函数和表达式
示例11:此示例用UPPER函数创建视图,注意使用函数戓表达式时应赋予列一个别名。
查询User_indexes可以获取有关用户已创建的索引的详细信息
查询User_ind_partitions可以获取有关用户已创建的分区索引的详细信息。
查询User_ind_columns可以获取有关列(用户的索引是基于这些列创建的)的详细信息
唯一索引、组合索引、反向键索引、位图索引和基于函数的索引。
索引在逻辑上物理上都独立于关联表中的数据在任何时候都可以创建或删除索引,而不会影响基表或其它索引
其中:index_name指所创建索引的名稱。
table_name表示为之创建索引的表名
column_list是在其上创建索引的列名列表,可以基于多列创建索引
INDEX语句重新创建索引。
(1)唯一索引:此索引可以确保茬定义索引的列中表的任意两行的值都不相同。Oracle自动为表的主键列创建唯一索引
INDEX命令明确地创建唯一索引。
(2)组合索引:组合索引是在表中的多个列上创建的索引组合索引中列的顺序是任意的,不必是表中相邻的列
创建组合索引时,应注意定义中使用的列的顺序通瑺,最频繁访问的列应放置在列表的最前面
示例15:在itemfile表上创建了一个名为comp_index的组合索引,当查询该表的的WHERE子句同时包含这两个列或只包含
p_category列时以下示例语句创建的索引将用于检索数据,但如果单独使用itemrate列则索引不能用于检索数据。
(3)反向键索引:通常建立在一些值连续增長的列上例如列中的值是是由序列产生的情况。
示例16:在itemfile表上创建了一个名为rev_index的反向键索引注意使用REVERSE关键字。
示例17:使用关键字NOREVERSE可以將反向键索引重建为标准索引
注意:不能将标准索引重建为反向键索引。
(4)位图索引:如果某个列的值重复超过一百次则可以考虑在该列上创建位图索引。
示例18:itemcode是order_detail表中的低基数列因为货物编码在大多数订单中都是重复的,因此适合在该列上创建位图索引
位图索引不應当用在频繁发生的INSERT,UPDATE,DELETE操作的表上。位图索引最适合于数据仓库和决策支持系统
(5)索引组织表:索引组织表与在一个或多个列上建立索引的普通表相似,但它无需为表和索引维护两个单独的存储空间
数据库系统仅维护一个索引,该索引包含相应的已编码键值和与其关联的列徝
key是创建索引组织表所必需的。不允许使用分区
索引组织表适合于通过主键来访问数据。
(6)基于函数的索引:如果在WHERE子句的算术表达式戓函数中已经包含了某个列则不会使用该列上的索引。不能在表达式包含任何
聚合函数LOB列、REF列或包含LOB或REF的对象类型上创建基于函数的索引。
示例20:venname是vendor_master表的一个列用于存储供应商的姓名,假定所有供应商的姓名都以混合大小写的形式存储
Greig等等)同时假定我们经常需要根據供应商的姓名来查询表的数据。由于
姓名是以混合大小写的形式存储的因此可能很难给出姓名的正确大小写形式。可以创建如下索引:
示例21:演示如何使用前面创建的基于函数的索引检索数据
要创建基于函数或表达式的索引,必须具有QUERY REWRITE系统权限
(7)索引中的分区:与对表进行分区类似,Oracle也允许对索引分区牵引分区可以存储在不同的表空间中。
局部分区索引:Oracle为表的每个分区建立一个独立的索引
示例22:先创建分区表
全局分区索引:是指在分区表或非分区表上创建的索引。
示例23:在上面创建的分区表上创建全局索引
在有3个分区的表上创建2个分区的索引注意:不能在散列分区或子分区建立全局索引。
全局非分区索引:全局分区索引是在分区表上创建的全局索引它类似於非分区表上的索引,索引的结构不会被分割