2024-03-19
原文作者:吴声子夜歌 原文地址: https://blog.csdn.net/cold___play/article/details/103835218

同义词

同义词(synonym)是表、索引和视图等模式对象的一个别名。同义词只是数据库对象的替代名,与视图类似,同义词并不占用实际存储空间,只在数据字典中保存同义词的定义。在使用同义词时,Oracle简单地将它翻译成对应方案的名称。

通过使用同义词,一方面可以简化对象访问,如数据字典视图 USER_INDEXES 的同义词为IND,数据字典视图USER_SEQUENCES的同义词为SEQ;另一方面可以提高对象访问的安全性,如屏蔽对象所有者、对象名和数据库链接名。

在开发数据库应用程序时,应当尽量避免直接引用表、视图或其他数据库对象打的名称,而改用这些对象的同义词。这样可以避免当管理员对数据库对象做出修改和变动之后,必须重新编译应用程序。使用同义词后,即使引用的对象发生变化,也只需要在数据库中对同义词进行修改,而不必对应用程序做任何改动。

在Oracle中可以创建两种类型的同义词:

  • 共用同义词(public synonym): 共有同义词是由PUBLIC用户组所拥有,数据库中所有的用户都可以使用共有同义词。
  • 私有同义词(private synonym): 私有同义词是由创建它的用户(或方案)所拥有,也称方案同义词(schema synonym)。用户可以控制其他用户是否有权使用属于自己的方案同义词。

在创建同义词时,它所基于的对象可以 不存在 ,并且创建同义词的用户也不需要对基础对象有任何访问权限。

语法如下

    CREATE [OR REPLACE][PUBLIC] SYNONYM synonym_name
    FOR [schema.]object;

为模式TEMP中的表sys_user创建一个共有同义词public_user,尽管该模式并不存在。

    create public synonym public_user
    for temp.sys_user;

如果同义词所对应的基础对象不存在,则当用户访问时同义词将重新编译,并验证为无效。

在操作过程中,不能修改或改变同义词,而只能删除。
删除刚刚创建的同义词

    drop public synonym public_user;

Oracle在数据字典中将保存创建同义词的定义。通过数据字典视图 USER_SYNONYMS ,可以查询有关同义词的信息。

阅读全文