知识扩展:数据库对象

表、视图、序列、过程、函数、程序包,甚至其它同义词都可以创建同义词。

1、同义词:私有同义词、公有同义词。

私有同义词只能被当前模式的用户访问。私有同义词名称不可与当前模式的对象名称相同。要在自身的模式创建私有同义词,

用户必须拥有Create Synonym系统权限。要在其它用户模式创建私有同义词,用户必须拥有Create Any Synonym系统权限。

公有同义词可被所有的数据库用户访问。要创建公有同义词,用户必须拥有Create Public Synonym系统权限。

创建私有同义词语法:

Create [OR REPLACE] SYNONYM [schema.]synonym_name FOR [schema.]object_name;

其中:OR REPLACE表示在同义词存在的情况下替换该同义词。

synonym_name表示要创建的同义词的名称。

object_name指定要为之创建同义词的对象的名称。

示例1:create synonym s_emp for scott.emp;

创建公有同义词语法:

Create PUBLIC SYNONYM synonym_name FOR [schema.]object_name;

示例2:create public synonym emp_syn from scott.emp;

可以查询字典视图User_Synonyms来查看用户所创建的同义词的详细信息

删除同义词语法:Drop Synonym synonym_name; 删除公有同义词加上一个Public

此命令只删除同义词,不会删除对应的表。

2、序列:是用来生成唯一、连续的整数的数据库对象。序列通常用来自动生成主键或唯一键的值。

创建序列语法如下:

Create SEQUENCE sequence_name

[START WITH integer]

[INCREMENT BY integer]

[MAXVALUE integer|NOMAXVALUE]

[MINVALUE integer|NOMINVALUE]

[CYCLE|NOCYCLE]

[CACHE interger|NOCACHE];

其中:START WITH是指定要生成的第一个序列号。对于升序序列,其默认值为序列的最小值。对于降序序列,其默认值为序列的最大值。

INCREMENT BY是用于指定序列号之间的间隔。其默认值为1。如果integer为正值,则生成的序列将按升序排列,否则按降序排列。

MAXVALUE指定序列可以生成的最大值。

NOMAXVALUE这是默认选项,将升序序列的最大值设为10的27次幂,将降序序列的最大值设为-1。

MINVALUE指定序列的最小值。MINVALUE必须小于或等于START WITH的值,并且必须小于MAXVALUE。

NOMINVALUE这是默认选项,将升序序列的最小值设为1,将降序序列的最小值设为-10的26次幂。

CYCLE指定序列在达到最大值或最小值后,将继续从头开始生成值。

NOCYCLE这是默认选项。指定序列在达到最大值或最小值后,将不能再继续生成值。

CACHE使用CACHE选项可以预先分配一组序列号,并将其保留在内存中,这样可以更快的访问序列号。

NOCACHE此项则不会为加快速度而预先分配序列号。如果在创建序列时忽略了CACHE和NOCACHE选项,Oracle将默认缓存20个序列号。

示例3:Create SEQUENCE toys_seq

START WITH 10

INCREMENT BY 2

MAXVALUE 2000

MINVALUE 10

NOCYCLE

CACHE 30;

访问序列:可以通过CURRVAL和NEXTVAL伪列来访问该序列的值。

示例4:演示从序列toys_seq中选择值插入toys表中的toyid列。执行成功将会在该表的toyid列插入值"P10"和"P12"。

INSERT INTO toys(toyid,toyname,toyprice) values('p'||toys_seq.NEXTVAL,'TWENTY',25);

INSERT INTO toys(toyid,toyname,toyprice) values('p'||toys_seq.NEXTVAL,'MAGIC PENCIL',75);

示例5:演示如何查看序列当前值

Select toys_seq.CURRVAL from dual;

更改序列:ALTER SEQUENCE命令用于设置或删除MINVALUE或MAXVALUE、修改增量值、修改缓存中的序列号的数目。

修改序列语法如下:注意,不能修改序列的START WITH参数。在修改序列时,应注意升序序列的最小值应小于最大值。

ALTER SEQUENCE [schema.]sequence_name

[INCREMENT BY integer]

[MAXVALUE integer|NOMAXVALUE]

[MINVALUE integer|NOMINVALUE]

[CYCLE|NOCYCLE]

[CACHE interger|NOCACHE];

示例6:演示如何设置一个新的MAXVALUE,并为toys_seq序列打开了CYCLE。

ALTER SEQUENCE toys_seq

MAXVALUE 5000

CYCLE;

可以查询字典视图User_Sequences来查看用户所创建的序列的详细信息

删除序列语法:Drop SEQUENCE toys_seq;

3、视图

视图是存储的查询定义。

创建视图的语法如下:

Create [OR REPLACE] [FORCE | NOFORCE] VIEW view_name[(alias,alias,...)] AS

select_statement [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY];

其中:OR REPLACE表示在该视图存在的话,将重新创建该视图。

FORCE使用此关键字,则无论基表是否存在,都将创建视图。

NOFORCE这是默认值。如果使用此关键字,则仅当基表存在时才创建视图。

view_name表示要创建视图的名称。

alias指定在视图里面列的名字,名字数目必须与视图所选择的表达式的数目相匹配。

select_statement表示Select语句。

WITH CHECK OPTION此选项指定只能插入或更新视图可以访问的行。术语constraint表示为CHECK OPTION约束指定的名称。

WITH READ ONLY此选项确保不能在此视图上执行任何修改操作。

示例7:演示创建一个名为ven_view的视图,该视图与vendor_master表具有相同的结构。

Create VIEW ven_view AS select * from vendor_master;

视图中的ORDER BY子句:以便在查询视图时即使不使用Order By子句,结果集也会按指定的顺序排列行。

示例8:Create OR REPLACE VIEW ven_view(编号,日期) AS select orderno,odate from vendor_master order by venname;

创建带有错误的视图:使用FORCE选项

在以下情况下,Oracle也会创建视图:

视力定义的查询引用了一个不存在的表;视图定义的查询引用了现有表中无效的列;视图的所有者没有所需的权限。

示例9:下面创建一个基于venmast的视图。但数据库中并不存在名为"venmast"的表。

Create FORCE VIEW ven AS select * from venmast;

如果稍后创建名为venmast的表,可以使用ALTER VIEW ven COMPILE;

联接视图:

示例:演示如何创建联接视图

Create OR REPLACE VIEW ven_ord_view AS select vm.vencode,venname,orderno,odate,ostatus

from vendor_master vm,order_master om where vm.vencode=om.vencode;

键保留表:在联接视图中,如果视图包含了一个表的主键,并且也是这个视图的主键,则这个键被保留,则这个表被称为键保留表。

ven_ord_view视图以vendor_master和order_master这两个表为基表。order_master表被视为键保留表,因为orderno既是order_master表

的主键,也是视图的主键。而vendor_master表不被视为键保留表,因为vendor_master表的主键vencode是联接字段,不是视图的主键。

示例10:此示例成功修改了记录,因为odate列属于键保留表order_master。对于非键保留表vendor_master的venname列的更新则是不允许的。

update wen_ord_view odate=odate+1 where vencode='V003';    注意:运行此示例时,必须确保基表的主键已正确创建。

可以查询字典视图User_Updateble_Columns来查看联接视图中可更新的列。

可以查询字典视图User_Views来查看用户所创建的视图信息。

视图中的函数:视图可以使用单行函数(由数字、字符、日期组成)、分组函数和表达式。

示例11:此示例用UPPER函数创建视图,注意使用函数或表达式时,应赋予列一个别名。

Create VIEW vendor_master_view AS select vencode,UPPER(venname) vendor_name from vendor_master;

删除视图语法:Drop VIEW view_name ;

4、索引:

查询User_indexes可以获取有关用户已创建的索引的详细信息。

查询User_ind_partitions可以获取有关用户已创建的分区索引的详细信息。

查询User_ind_columns可以获取有关列(用户的索引是基于这些列创建的)的详细信息。

唯一索引、组合索引、反向键索引、位图索引和基于函数的索引。

索引在逻辑上物理上都独立于关联表中的数据,在任何时候都可以创建或删除索引,而不会影响基表或其它索引。

创建普通索引的语法:

Create INDEX index_name ON table_name(column_list) [TABLESPACE tablespace_name];

其中:index_name指所创建索引的名称。

table_name表示为之创建索引的表名。

column_list是在其上创建索引的列名列表,可以基于多列创建索引。

tablespace_name为索引指定表空间。

示例12:演示如何在itemfile表的itemcode列上创建索引

create index item_index on itemfile(itemcode);

ALTER INDEX语句的REBUILD选项可以用来重建现有的索引。该选项提供的性能要优于使用DROP INDEX和CREATE INDEX语句重新创建索引。

示例13:重建索引

ALTER INDEX item_index REBUILD;

删除索引语法:Drop INDEX item_index;

(1)唯一索引:此索引可以确保在定义索引的列中,表的任意两行的值都不相同。Oracle自动为表的主键列创建唯一索引。

可以使用Create UNIQUE INDEX命令明确地创建唯一索引。

示例14:在itemfile表的itemcode列上创建了一个名为item_index的唯一索引。

Create UNIQUE INDEX item_index ON itemfile(itemcode);

(2)组合索引:组合索引是在表中的多个列上创建的索引。组合索引中列的顺序是任意的,不必是表中相邻的列。

创建组合索引时,应注意定义中使用的列的顺序。通常,最频繁访问的列应放置在列表的最前面。

示例15:在itemfile表上创建了一个名为comp_index的组合索引,当查询该表的的WHERE子句同时包含这两个列或只包含

p_category列时,以下示例语句创建的索引将用于检索数据,但如果单独使用itemrate列,则索引不能用于检索数据。

Create INDEX comp_index ON itemfile(p_category,itemrate);

(3)反向键索引:通常建立在一些值连续增长的列上,例如列中的值是是由序列产生的情况。

示例16:在itemfile表上创建了一个名为rev_index的反向键索引。注意使用REVERSE关键字。

Create INDEX rev_index ON itemfile(itemcode) REVERSE;

示例17:使用关键字NOREVERSE可以将反向键索引重建为标准索引。

ALTER INDEX rev_index REBUILD NOREVERSE;

注意:不能将标准索引重建为反向键索引。

(4)位图索引:如果某个列的值重复超过一百次,则可以考虑在该列上创建位图索引。

示例18:itemcode是order_detail表中的低基数列,因为货物编码在大多数订单中都是重复的,因此适合在该列上创建位图索引。

Create BITMAP INDEX bit_ind1 ON order_detail(itemcode);

位图索引不应当用在频繁发生的INSERT,UPDATE,DELETE操作的表上。位图索引最适合于数据仓库和决策支持系统。

(5)索引组织表:索引组织表与在一个或多个列上建立索引的普通表相似,但它无需为表和索引维护两个单独的存储空间,

数据库系统仅维护一个索引,该索引包含相应的已编码键值和与其关联的列值。

示例19:使用ORGANIZATION INDEX子句来创建索引组织表。

Create table ind_org_tab

(

vencode NUMBER(4) primary key,          注意:primary key是创建索引组织表所必需的。不允许使用分区。

venname VARCHAR2(20)

)

organization index;

索引组织表适合于通过主键来访问数据。

(6)基于函数的索引:如果在WHERE子句的算术表达式或函数中已经包含了某个列,则不会使用该列上的索引。不能在表达式包含任何

聚合函数,LOB列、REF列或包含LOB或REF的对象类型上创建基于函数的索引。

示例20:venname是vendor_master表的一个列,用于存储供应商的姓名,假定所有供应商的姓名都以混合大小写的形式存储

(如:John Smith、Dave Jones、Tony Greig等等),同时假定我们经常需要根据供应商的姓名来查询表的数据。由于

姓名是以混合大小写的形式存储的,因此可能很难给出姓名的正确大小写形式。可以创建如下索引:

Create INDEX vn_ind ON vendor_master(UPPER(venname));

示例21:演示如何使用前面创建的基于函数的索引检索数据。

select * from vendor_master where UPPER(venname)='SMALL';

要创建基于函数或表达式的索引,必须具有QUERY REWRITE系统权限。

(7)索引中的分区:与对表进行分区类似,Oracle也允许对索引分区。牵引分区可以存储在不同的表空间中。

局部分区索引:Oracle为表的每个分区建立一个独立的索引。

示例22:先创建分区表

Create table order_mast

(

orderno number(4),

venname varchar2(20)

)

partition by range(orderno)

(

partition oe1 values less than(1000),

partition oe2 values less than(2000),

partition oe3 values less than(maxvalue)

);

接着创建局部索引:

create INDEX myind ON order_mast(orderno) LOCAL;

全局分区索引:是指在分区表或非分区表上创建的索引。

示例23:在上面创建的分区表上创建全局索引

create INDEX glb_ind ON order_mast(orderno) GLOBAL

partition by range(orderno)

(

partition ip1 values less than(1500),

partition ip2 values less than(maxvalue)

);

在有3个分区的表上创建2个分区的索引。注意:不能在散列分区或子分区建立全局索引。

全局非分区索引:全局分区索引是在分区表上创建的全局索引,它类似于非分区表上的索引,索引的结构不会被分割。

mysql实现oracle的同义词_Oracle的同义词(synonyms)详解相关推荐

  1. sqlserver新增主键自增_深入Mysql,SqlServer,Oracle主键自动增长的设置详解

    1.把主键定义为自动增长标识符类型MySql在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: create table customers(id i ...

  2. 深入Mysql,SqlServer,Oracle主键自动增长的设置详解

    1.把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: 复制代码 代码如下: create table c ...

  3. mysql和oracle执行计划_mysql explain执行计划详解

    原文链接:https://www.cnblogs.com/xiaoboluo768/p/5400990.html mysql> explain  select t1.kprq from    p ...

  4. oracle 韩思捷_ORACLE数据库技术实用详解:教你如何成为10g OCP

    本书系统全面地介绍了Oracle10g数据库的结构.管理和优化,内容涵盖整个10gOCP的考试范围.包括Oracle10g数据库的体系架构.存储结构.网络服务.备份与恢复.闪回(flashback)管 ...

  5. c++ 操作oracle 最佳方式_oracle备份恢复基础详解

    一.Oracle备份方式分类: Oracle有两类备份方式: (1)物理备份:是将实际组成数据库的操作系统文件从一处拷贝到另一处的备份过程,通常是从磁盘到磁带. 物理备份又分为冷备份.热备份: (2) ...

  6. mysql的回滚段_ORACLE 回滚段详解

    ORACLE 回滚段 回滚段概述 回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值).回滚段的头部包含正在使用的该回滚段事务的信息.一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段 ...

  7. Oracle创建表语句(Create table)语法详解及示例

    Oracle创建表语句(Create table)语法详解及示例   创建表(Create table)语法详解 1. ORACLE常用的字段类型ORACLE常用的字段类型有 VARCHAR2 (si ...

  8. oracle中imp命令详解,ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP命令详细对照...

    ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP 命令详细对比 一.EXPDP IMPDP EXP IMP 可以实现 1.可以实现逻辑备份和逻辑恢复 2.可以在数据库用户之间 ...

  9. MySQL锁、事务隔离级别、MVCC机制详解、间隙锁、死锁等

    一. 简介 1. 锁定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除了传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供需要用户共享的资源.如何保证数据并 ...

  10. java metadata 使用_java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMet ...

最新文章

  1. AI是万能的吗?当前AI仍面临的难题是什么?
  2. 今天整理了下所有博文
  3. linux降内核版本_ubuntu18.04 降内核版本的问题
  4. Hello, World!我的房车编程生活,已经 150 天了
  5. 用vmware-converter4把linux 迁移到ESX4.1中
  6. 女神节,来聊聊这几位神一般的“程序媛”
  7. 软件测试:web渗透测试怎样入门!讲透了...
  8. PancakeBunny获160万美元战略融资,Binance Labs领投
  9. idea导包都报错_不仅仅要会导别人的包也要会导自定义的包——Python导包总结...
  10. Mycat 分布式事务的实现
  11. 【车间调度】基于matlab NSGA-2算法求解多目标车间调度问题【含Matlab源码 893期】
  12. 服务器虚拟机迁移的6个步骤,KVM 虚拟机迁移(示例代码)
  13. PageHelper.startPage分页的使用和pageSize的值和list相同导致循环出来的total总数不对
  14. 快速更换证件照背景颜色
  15. Bar Chart Race」动态可视化
  16. 使用Qt对Excel复选框等进行阅读、修改
  17. 时间搓转换剩余时间 php
  18. 进阿里一年中最好的机会
  19. android 优秀框架整理
  20. python设置散点图点的大小_python_matplotlib分别使用plot()和scatter()画散点图,以及如何改变点的大小...

热门文章

  1. 技术贴:如何跟刚认识的女孩发短信
  2. 【伍志庆】手写签名设计
  3. 1656_MIT 6.828 JOS i386_init的实现分析
  4. linux怎么进mysql天气_Linux命令行怎么浏览天气预报
  5. [机器学习] 机器学习笔记_csv文件格式特点
  6. Exchange Server 2010 邮件发送延迟排错
  7. Glup快速入门整理
  8. 一寸免冠照片是什么意思?如何才能制作或修改?
  9. SQL知识点小结(嵌套查询)
  10. 求人求己不如求佛,上学上进不如上香。—元理先生谈谈这文化现象 。