135 lines
3.8 KiB
Markdown
135 lines
3.8 KiB
Markdown
CREATE SYNONYM
|
|
===================================
|
|
|
|
|
|
|
|
描述
|
|
-----------
|
|
|
|
该语句用来创建一个同义词。
|
|
|
|
格式
|
|
-----------
|
|
|
|
```javascript
|
|
CREATE [ OR REPLACE ] [ PUBLIC ]
|
|
SYNONYM [ DATABASE. ]synonym
|
|
FOR [ DATABASE. ]object;
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
参数说明
|
|
-------------
|
|
|
|
|
|
|
|
| **参数** | **描述** |
|
|
|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
| OR REPLACE | 表示如果要创建的同义词名称已存在,则使用新的定义重新创建同义词。 |
|
|
| PUBLIC | 指定PUBLIC来创建公共同义词,所有用户都可以使用。用户必须对基础对象具有相应的权限才能使用该同义词。 在解析对象的引用时,仅当对象没有指定DataBase时,才会使用公共同义词。 如果不指定PUBLIC,则同义词是私有的,只能当前DataBase访问,并且同义词名称在当前DataBase中必须唯一。 |
|
|
| \[ DataBase. \]synonym | DataBase指定当前同义词属于哪个DataBase,如果指定了PUBLIC,则对同义词不需要指定DataBase;synonym表示同义词的名称。 |
|
|
| \[ DataBase. \]object | 表示同义词对应对象的名称。 |
|
|
|
|
|
|
|
|
|
|
|
|
举例
|
|
-----------
|
|
|
|
* 创建一个同义词。
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
OceanBase(admin@test)>create table t1(c1 int);
|
|
Query OK, 0 rows affected (0.18 sec)
|
|
|
|
OceanBase(admin@test)>create synonym s1 for t1;
|
|
Query OK, 0 rows affected (0.05 sec)
|
|
|
|
OceanBase(admin@test)>insert into s1 values(1);
|
|
Query OK, 1 row affected (0.02 sec)
|
|
|
|
OceanBase(admin@test)>select * from s1;
|
|
+------+
|
|
| c1 |
|
|
+------+
|
|
| 1 |
|
|
+------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
* 创建一个PUBLIC同义词
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
OceanBase(admin@test)>create public synonym syn_pub for t1;
|
|
Query OK, 0 rows affected (0.03 sec)
|
|
|
|
OceanBase(admin@test)>select * from syn_pub;
|
|
+------+
|
|
| c1 |
|
|
+------+
|
|
| 1 |
|
|
+------+
|
|
1 row in set (0.01 sec)
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
注意事项
|
|
-------------
|
|
|
|
创建同义词时,需要满足如下权限要求:
|
|
|
|
* 在当前的DataBase下创建私有的synonym,需要CREATE SYNONYM权限
|
|
|
|
* 在非当前DataBase下创建私有的synonym,需要CREATE ANY SYNONYM权限
|
|
|
|
* 创建PUBLIC的synonym,需要CREATE PUBLIC SYNONYM权限
|
|
|
|
* 对于需要创建synonym的对象不需要存在,也不需要具有访问权限
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
连接sys用户:
|
|
OceanBase(ADMIN@TEST)>CREATE USER syn_user IDENTIFIED BY syn_user;
|
|
Query OK, 0 rows affected (0.06 sec)
|
|
|
|
OceanBase(ADMIN@TEST)>grant CREATE on syn_user.* to syn_user;
|
|
Query OK, 0 rows affected (0.02 sec)
|
|
|
|
OceanBase(ADMIN@TEST)>grant SELECT on syn_user.* to syn_user;
|
|
Query OK, 0 rows affected (0.03 sec)
|
|
|
|
|
|
连接syn_user
|
|
//创建同义词失败
|
|
OceanBase(SYN_USER@(none))>create synonym syn_1 for t1;
|
|
ERROR-00600: internal error code, arguments: -5036, Access denied; you need (at least one of) the CREATE SYNONYM privilege(s) for this operation
|
|
|
|
连接sys用户,给定CREATE SYNONYM权限
|
|
OceanBase(ADMIN@TEST)>grant CREATE SYNONYM on *.* to syn_user;
|
|
Query OK, 0 rows affected (0.03 sec)
|
|
|
|
连接syn_user
|
|
OceanBase(SYN_USER@(none))>create synonym syn_1 for t1;
|
|
Query OK, 0 rows affected (0.05 sec)
|
|
```
|
|
|
|
|
|
|