同义词是可以用来替换另一个 SQL 标识的名称。 可使用 CREATE SYNONYM 语句来声明表、视图或(对于 GBase 8s)序列对象的备用名称。
CREATE SYNONYM mcust FOR masterdb@central:customer; CREATE SYNONYM bords FOR sales@boston:orders;
SELECT bords.order_num, mcust.fname, mcust.lname FROM mcust, bords WHERE mcust.customer_num = bords.Customer_num INTO TEMP mycopy;
CREATE SYNONYM 语句在当前数据库中的系统目录表 syssyntable 中存储同义词名称。该同义词可用于在该数据库中进行的任何查询。 (然而如果设置了 USETABLENAME 环境变量,那么 SQL 的某些 DDL 语句不支持用同义词代替表名。)
简短的同义词可以简化查询的编写工作,但同义词也可以扮演另一角色。它们允许将表移至另一个数据库中,甚至移至另一台计算机,同时保持查询不变。
假设有几个引用表 customer 和 orders 的查询。这些查询嵌入在程序、表单和报告中。这些表是演示数据库的一部分,演示数据库存放在数据库服务器 avignon 上。
现在,您决定将这些程序、表单和报告提供给网络中的另一台计算机(数据库服务器 nantes)的用户使用。那些用户有包含表 orders(该表包含他们所在位置的订单)的数据库,但他们必须能够访问 avignon 上的表 customer。
DATABASE stores_demo@nantes; CREATE SYNONYM customer FOR stores_demo@avignon:customer;
当在您的数据库中执行存储查询时,名称 customer 指的是实际的表。当在其他数据库中执行那些查询时,该名称会通过同义词解析为对存在于数据库服务器 avignon 上的表的引用。(在不符合 ANSI 标准的数据库中,同义词必须在数据库中的同义词、表、视图和顺序对象的名称中具有唯一性。在符合 ANSI 标准的数据库中,owner.synonym 组合必须在使用 tabid 值在数据库中注册的对象名称空间中具有唯一性。)