Oracle数据库对象_同义词

同义词是一种数据库对象,它是为一个数据库对象定义的别名,使用同义词的主要目的是为了简化SQL语句的书写

同义词的概念和类型

利用同义词可以为用户的一个对象,或者其他用户的一个对象定义别名,从而简化命令或程序的书写,在命令或程序中可以直接使用同义词代替原来的对象

可以为表、视图、存储程序、序列等对象建立同义词,也可以为一个同义词再建立同义词,甚至可以为一个不存在的对象建立同义词,系统仅仅在使用同义词时才验证它所代表的对象是否存
同义词本身并不包含原对象中的数据或代码,它的作用仅仅相当于一个指针

在使用同义词时,系统根据同义词的定义查找它所指向的对象,将对同义词的访问转化为对原对象的访问
同义词的作用仅仅是为了方便用户操作数据库对象。

Oracle支持两种类型的同义词,即私有同义词公共同义词

私有同义词由普通用户创建,在默认情况下只能由用户本人使用。
公有同义词一般由DBA创建,可以由所有用户使用。

公共同义词的意义在于它代表了一个大家都可以访问的对象。

注:普通用户如果要访问公有同义词,需要具有对同义词所指向的原对象的访问权限。

一般来说,在具有相关数据库对象的权限后,即可进行相关的操作,但如果定义了同义词,就可以简化SQL语句的书写。

比如在访问其他用户模式下的数据库对象时,便可以省略对象前的模式名称。

用户可以随意为其他用户的一个对象创建一个同义词,但这并不意味着这个用户就具有了访问其他用户的对象的权限。

因为正如前面所提到的,只有在使用同义词时,系统才验证用户是否有相应的访问权限。

例如:

create synonym emp for scott.emp;

select * from emp;

注:以普通用户身份在scott用户模式下为数据库对象emp创建同义词emp。

在没有访问权限的情况下,提示错误:ORA-00942: 表或视图不存在。

在考虑另一种情况,就是为不存在的对象创建同义词:

create synonym em for scott.em;

select * from em;

在使用同义词em访问源对象时,提示错误:ORA-00980: 同义词转换不再有效。

同义词的创建和删除

用户可以在自己的模式中创建同义词,这时需要具有CREATE SYNONYM这个系统权限。
如果希望在其他用户的模式中创建同义词,则需要具有CREATE ANY SYNONYM这个系统权限。

普通用户如果希望创建公有同义词,需要具有CREATE PUBLIC SYNONYM系统权限。

创建私有同义词的命令是CREATE SYNONYM ,它的语法规则为:

CREATE SYNONYM 同义词 FOR 用户名.对象名;

创建公有同义词的语法格式为:

CREATE SYNONYM 同义词 FOR 用户名.对象名;

注:这里的用户名.对象名是指其他用户模式,因为一般在创建同义词时,是为了方便访问其他用户模式下的对象。

当然也可以在自己模式下创建同义词,对于普通用户而言,如果是创建私有同义词是没有什么意义的。

对于公有同义词而言,普通用户和DBA权限用户都可以在自己用户模式下,创建公有同义词,这样可以方便其他用户对该数据库对象的访问。

比如DBA权限用户创建v$开头的有关动态性能视图的公有同义词。

用户如果不使用同义词时,可以将其删除。

删除同义词的命令是DROP SYNONYM,这条命令的语法格式为:
DROP SYNONYM 同义词名;

注:如果要删除公有同义词的话,要在关键字SYNONYM之前加上关键字PUBLIC。

一个用户可以删除自己创建的同义词,如果要删除其他用户创建的同义词,则要具有DROP ANY SYNONYM 系统权限。
DBA 可以删除所有的公共同义词,普通用户需要具有DROP PUBLIC SYNONYM系统权限,才能删除公共同义词
同义词被删除以后,它的相关信息也将从数据字典中删除。

注:对于普通用户而言,即使是自己创建的公有同义词,仍需要具有DROP PUBLIC SYNONYM系统权限,才能删除自己创建的同义词。

同义词信息的查询

同义词作为一种数据库对象,它的相关信息被存储在数据字典中。

与同义词有关的数据字典有三个: user_synonyms 、all_synonyms 、dba_synonyms。

其中在数据字典user_synonyms 中记录了当前用户所拥有的同义词。这个表的各列定义及其意义如下所示:

SYNONYM_NAME 同义词名称

TABLE_OWNER 所指向的对象属主

TABLE_NAME 所指向对象的名称

DB_LINK 数据库链接

注:DB_LINK 列是指在创建同义词SYNONYM时,TABLE_NAME 是通过DBLINK获得的。

如果要查询当前用户创建了哪些同义词,它们各代表哪个用户的哪个对象,可以执行下面的SELECT语句进行查询:
SELECT synonym_name, table_owner, table_name FROM user_synonyms;

在数据字典all_synonyms 中记录了当前用户所能使用的所有同义词,包括私有同义词和公共同义词。
在数据字典dba_synonyms 中记录了数据库中所有的同义词,包括每个用户创建的私有同义词和DBA 创建的公共同义词。
这个视图只有DBA 能够访问,它的结构除了包含数据字典user synonyms的所有列外,还有一个列owner代表同义词的创建者
如果要在整个数据库范围内查询某个同义词的信息,可以对数据字典dba_synonyms进行查询。
例如,要查询用户scott所创建的所有同义词,可以执行下面的SELECT语句:

SELECT synonym_name, table_owner, table_name FROM dba_synonyms WHERE owner=‘SCOTT‘;

如果要查询用户scott的表dept具有哪些同义词,可以执行下面的SELECT语句:

SELECT synonym_name, table_owner FROM dba_synonyms WHERE owner=‘SCOTT‘ AND table_name=‘EMP‘;

如果要查询系统中所有的公共同义词,可以执行下面的SELECT语句:

SELECT synonym_name, table_owner FROM dba_synonyms WHERE owner=‘PUBLIC‘;

注:table_owner和owner之前的区别:

table_owner是指同义词所指向数据库对象的属主,一般就是指该对象的创建者,而owner是指同义词的创建者。

 

时间: 2024-10-29 19:11:22

Oracle数据库对象_同义词的相关文章

Oracle数据库对象,同义词、序列、视图、索引

数据库对象简介 Oracle 数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 其他数据库对象包括: 同义词是现有对象的一个别名. 简化SQL语句 隐藏对象的名称和所有者 提供对对象的公共访问 同义词共有两种类型: CREATE USER test IDENTIFIED BY test; GRANT CONNECT , CREATE SYNONYM TO test; GRANT SELECT ON SCOTT.EMP TO test; GRANT DELETE ON S

Oracle数据库对象_序列

序列是一种数据库对象,用来自动产生一组唯一的序号. 序列是一种共享式的对象,多个用户可以共同使用序列中的序号.一般将序列应用于表的主键列,这样当向表中插入数据时,主键列就使用了序列中的序号,从而保证主键列的值不会重复.用这种方式可以代替在应用程序中产生主键值的方法,可以获得更可靠的主键值.注:在序列指定最大值和可循环属性后,序列中的序号是可以循环使用的. 序列的创建.修改和删除 默认情况下,用户可以在自己的模式中创建序列.如果希望在其他用户的模式中创建序列,则必须具有CREATE ANY SEQ

Oracle数据库对象_约束

约束是加在表上的一种强制性的规则,是保证数据完整性的一种重要手段. 当向表中插入数据,或修改表中的数据时,必须满足约束所规定的条件. 在设计表的结构时,应该充分考虑在表上需要施加的约束.保证数据完整性的方法大致有三种,即应用程序代码.触发器和约束. 其中约束是一种更为灵活的方式,它不仅维护更加方便,而且性能也比较高,是保证数据完整性的最佳选择.约束可以在创建表时指定,也可以在表创建之后再指定. 如果在表创建之后再指定约束,可能会因为表中已经存在一些数据不满足这个条件而使得约束无法施加. 约束的类

Oracle数据库对象_视图

视图是一种非常重要的数据库对象,它的形式类似于普通表,我们可以从视图中查询数据. 实际上它是建立在表上的一种虚表,在视图中并不存储真正的数据,而是仅仅保存一条SELECT语句,对视图的访问将被转化为对表的访问. 视图所基于的表称为基表,而视图可以认为是对基表的一种查询操作. 使用视图的主要目的是为了方便用户访问基表,以及保证用户对基表的安全访问. 对用户而言,往往要对一个表进行大量的查询操作,如果查询操作比较复杂,并且需要频繁地进行,那么可以为这个查询定义一个视图. 需要注意的是,在视图中并不保

Oracle数据库对象_索引

查询是在表上进行的最频繁的访问. 在查询数据时,很少有用户愿意查询表中的所有数据,除非要对整个表进行处理.一般情况下用户总是查询表中的一部分数据. 在SELECT语句中,通常需要通过WHERE子句指定查询条件,以获得满足该条件的所有数据.如果能够在很小的范围内查询需要的数据,而不是在全表范围内查询,那么将减少很多不必要的磁盘1/0 ,查询的速度无疑会大大加快.提供这种快速查询的方法就是索引. 索引的基本概念 索引是一种建立在表上的数据库对象,它主要用于加快对表的查询操作. 合理使用索引可以大大减

Oracle数据库对象

Oracle数据库对象又称模式对象,它是逻辑结构的集合,其中最基本的数据库对象是表.常见的数据库对象包括同义词.序列.视图等. 1.视图 视图可以限制表中一组行为访问.隐藏了数据的复杂性.简化了用户的sql.基表定义修改隔离.通过重命名列从另一个角度提供了数据. 2.触发器(Trigger) 如果想对视图进行增删改,就可以使用触发器. 3.数据字典 oracle中分为了静态数据字典和动态数据字典. 静态数据字典: dba_*** :查看所有的用户表 all_*** :查看该用户下能看到的所有表

oracle数据库链路和同义词

Oracle数据库链路的建立和使用 一.数据库链路的建立: 1.数据库链路的建立语法一般是:CREATE DATABASE LINK[db_link_name] CONNECT TO [user_name] IDENTIFIED BY [password] USING '[tns_name]'; 其中: [DB_LINK_NAME]:是所要连接的数据库的服务名,也就是该数据库的真实名称(通常就是SID). [USRE_NAME]:是所要连接的用户名称. [PASSWORD]:是所要连接的用户的密

Oracle数据库对象查询是否被锁定及解锁

Oracle数据库对象是否被锁定查询SQL及解锁过程SQL详见下面: --查询当前用户下被锁的对象SELECT B.OBJECT_NAME, B.OWNER, C.SID,C.SERIAL#,C.OSUSER, C.MACHINE, C.TERMINAL  FROM V$LOCKED_OBJECT A, DBA_OBJECTS B, V$SESSION C WHERE A.OBJECT_ID = B.OBJECT_ID   AND A.SESSION_ID = C.SID   AND c.STA

数据库 Oracle数据库对象一

常见的数据库对象 表:基本的数据存储集合,由行和列组成 视图:从表中抽出的逻辑上相关的数据集合 序列:提供有规律的数值 索引:提高查询的效率 同义词:给对象起别名 create table语句 --create table权限 --存储空间 数据类型 varchar2(size) 可变长字符数据(默认4kb) char(size) 定长字符数据 number(p,s) 可变长数值数据 date 日期型数据 long 可变长字符数据,最大可达到2G clob 字符数据,最大可达到4G raw an