DM的同义词

一、同义词的概念
同义词(Synonym)让用户能够为数据库的一个模式下的对象提供别名。同义词通过掩盖一个对象真实的名字和拥有者,并且对远程分布式的数据库对象给予了位置透明特性以此来提供了一定的安全性。同时使用同义词可以简化复杂的 SQL 语句。同义词可以替换模式下的表、视图、序列、函数、存储过程等对象。

二、创建同义词

创建同义词的用户要有有GRANT CREATE PUBLIC SYNONYM 权限
语法:CREATE [OR REPLACE] [PUBLIC] SYNONYM [<模式名>.]<同义词名> FOR [<模式名>.]<对象名>

例子:
CREATE TABLE "TEST"."T1" ("NUM" INTEGER, "NAME" VARCHAR(50), PRIMARY KEY("NUM"));
INSERT INTO "TEST"."T1" ("NUM", "NAME") VALUES (1, '小明');
INSERT INTO "TEST"."T1" ("NUM", "NAME") VALUES (2, '小红');

对TEST模式下的T1表建同义词:

CREATE SYNONYM TEST.S1 FOR TEST.T1;

当想查询TEST.T1表有多少行数据时,可以使用同义词查询:

SELECT COUNT(*) FROM TEST.S1;

三、同义词的使用说明

1.同义词分为全局同义词(PUBLIC SYNONYM)和非全局同义词。用户在自己的模式下创建同义词,必须有 CREATE SYNONYM 权限。用户要创建全局同义词(PUBLIC SYNONYM),必须有 CREATE PUBLIC SYNONYM 权限;
2.全局同义词创建时不能指定同义词的模式名限定词,它能够被所有用户使用,使用时不需要加任何模式限定名。非全局同义词被非同义词所属模式拥有者引用需要在前面加上模式名;公有同义词和私有同义词,可以具有相同的名字;非全局同义词不能与目标对象同名;
3.用户使用 SQL 语句对某个对象进行操作,那么解析一个对象的顺序,首先是查看模式内是否存在该对象,然后再查看模式内的同义词(非全局同义词),最后才是全局同义词。例如,用户 OE 和 SH 在他们的模式下都有一个表叫 customer,SYSDBA 为 OE 模式下的 customer 表创建了一个全局同义词 customer_syn,SYSDBA 为 SH 模式下的 customer 表创建了一个私有同义词 customer_syn,如果用户 SH 查询:SELECT COUNT(*) FROM customer_syn,则此时返回的结果为 SH.CUSTOMER 下的行数,而如果需要访问 OE 模式下的 CUSTOMER 表,则必须在前面加模式名:SELECT COUNT(*) FROM OE.customer_syn;
4.如果创建时候没有指定 REPLACE 语法要素,则不允许创建同名同类型同义词(不同类型则可以,这里的不同类型指的是 PUBLIC 和非 PUBLIC);
5.同义词创建时,并不会检查他所指代的同义词对象是否存在,用户使用该同义词时候,如果不存在指代对象或者对该指代对象不拥有权限,则会报错。
6.当 INI 参数 ENABLE_PL_SYNONYM=0 时,禁止通过同义词执行非系统用户创建的包或者 DMSQL 程序。

四、删除同义词

删除同义词,必须是 DBA 或者拥有此同义词的用户才能删除该同义词,如果要删除公有同义词,则必须要指定 PUBLIC,因为在达梦数据库中,公有同义词和私有同义词可以同名,所以如果不指定,则删除的是当前模式下的同名同义词,删除公有同义词,需要指定 PUBLIC,而删除私有同义词,则不能指定,否则报错;如果删除当前模式下的同义词,可以不指定模式名,如果删除其它模式下的同义词,需要指定相应的模式名,否则报错

语法:DROP [PUBLIC] SYNONYM [IF EXISTS] <同义词名>

例如:DROP SYSNONYM TEST.S1;

达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值