概念 同义词是数据库对象的一个别名,常用于简化对象访问及提高对象访问的安全性。在使用同义词时,Oracle 数据库自动将它翻译成对应模式对象的名字。与视图类似,同义词并不占用实际存储空间,只在数据字典中保存了同义词的定义。同义词可以指向的对象有表、视图、物化视图、序列、函数、存储过程、包、同义词等。Oracle 同义词有公用同义词和专用同义词两种。普通用户如果希望创建同义词,还需要有 CREATE PUBLIC SYNONYM 这个系统权限。 公用同义词:由一个特殊的用户组 PUBLIC 所拥有,顾名思义,数据库中所有的用户都可以使用公用同义词。公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。 专用同义词:由创建它的用户专用,当然,这个同义词的创建者,也可以通过授权来让别的用户访问自己的专用同义词。 语法 创建同义词: CREATE [PUBLIC] SYNONYM [SCHEMA.]synonym_name FOR [SCHEMA.]object_name[@dblink];说明:加PUBLIC表示公用,不能同时指定PUBLIC和synonym_name的SCHEMA,@dblink表示远程数据库连接。 示例: CREATE PUBLIC SYNONYM staff FOR demo.t_staff;删除同义词: DROP [PUBLIC] SYNONYM [SCHEMA.]synonym_name; -- 也不能同时指定`PUBLIC`和`synonym_name`的`SCHEMA`示例: DROP PUBLIC SYNONYM staff;用途 1、多用户协同开发中,可以屏蔽对象的名字及其持有者。如果没有同义词,当操作其他用户的表时,必须通过schema.object_name的形式,采用了 Oracle 同义词之后就可以屏蔽掉 schema,当然这里要注意的是:PUBLIC 同义词只是为数据库对象定义了一个公共的别名,其他用户能否通过这个别名访问这个数据库对象,还要看是否已经为这个用户授权。 2、为用户简化 SQ了语句,屏蔽 schema 也是一种简化 SQL 的体现。同时,如果自己建的表的名字很长,也可以为这个表创建一个 Oracle 同义词来简化 SQL 开发。 3、为分布式数据库的远程对象提供位置透明性。在分布式数据库环境中,为了识别一个数据库对象,必须规定主机名、服务器名、对象的拥有者和对象名,这无疑增加了访问者的访问难度。为了给不同的用户使用数据库对象时提供一个简单的、唯一标识数据库对象的名称,可以为数据库对象创建同义词。
|