最近在公司听到同义词,不是很懂,甚是尴尬,决定看了一看
从网上看了看资料
同义词是指数据库对象(表、视图、序列、存储过程等数据库对象)用另一个名字来引用。比如:
建立一个同义词可以排除一个对象名字的限制.
如果你的数据库有多个用户,USER_A要访问USER_B的TABLE1,只能使用USER_B.TABLE1
建一个同义词abc指向USER_B.TABLE1,那你就可以select * from abc了,而且public的同义词会直接出现在所有用户的面前
一、Oracle数据只有一个实例(简单理解就是Oracle 只能建立一个数据库,不像MySQL,它下面可以创建N个库),那么Oracle是根据用户灵活去管理的;这点读起来、理解
起来也不那么难,但是除非自己亲自实现一把才理解深入点,刚接触数据库可能不是很理解这些;
二、Oracle中可以建立多个用户,那么这些用户刚建立是得授权的,不让没有权限做任何事情,(举个栗子:用户 ‘AA’ 是授权的DBA用户,此用户下面有 N 张表,如果再创建
一个用户 “BB” ,那么 “BB” 是没有权限读取 “AA” 中表的,有人可能就会说给他授权不就行了么,给 “BB” 授予超级权限,抱歉,那也不行,你同样么有机会访问 “AA”
中的表的,你虽然授予了超级权限,那是在你名下的,在 “AA” 起不了作用),是不是很是揪心,同一个库下两个 超级用户 还不能访问。
三、是不是在 “BB” 用户下在把 “AA” 下的表 复制一遍不就好了,没错,这样也能实现,但是这样会浪费很多资源,而且不能同步数据;这种情况下 同义词 就有用武之地了,
其实 同义词 也相当于一个视图 可以这个么理解,可以进行对表的 增删改查,(省资源,数据同步);
创建同义词
语法:
CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.] synonym_name FOR [schema.] object_name [@dblink];
语法说明:
OR REPLACE: 在不使用DROP的前提下容许你重新创建(如果同义词已经存在)。
PUBLIC: 所创建的同义词是全局的同义词,所有数据库用户都可以使用。
schema: 要创建同义词的对象所在的schema,如果省略,则默认的应用对象在当前schema下。
object_name: 要创建同义词的对象,它可以是以下几种类型:
TABLE
VIEW
SEQUENCE
STORED PROCEDURE
FUNCTION
PACKAGE
MATERIALIZED VIEW
JAVA CLASS SCHEMA OBJECT
USER-DEFINED OBJECT
SYNONYM
例子:
CREATE PUBLIC SYNONYM suppliers FOR app.suppliers;
删除同义词
DROP [PUBLIC] SYNONYM [schema.] synonym_name [FORCE];
说明:
PUBLIC: 容许删除PUBLIC同义词, 如果使用了PUBLIC关键字,则可以省略schema。
FORCE:用来强制删除同义词,即使它在数据库中有其它的依赖。
DROP PUBLIC SYNONYM suppliers;
原文:https://blog.csdn.net/jssg_tzw/article/details/42300581