詳解同義詞(synonym)
詳解同義詞(synonym)
synonym(同義詞):是一張表,檢視,序列,函式等資料庫物件的別名。同義詞依賴於目標物件
如果目標物件被刪除或者該表了,同名就無效了。同義詞提供了資料獨立性位置無關性。運用
程式不必知道使用的同義詞所依賴的物件的名字,在那個表空間等。但是使用者使用別名也需要
獲得相應的授權。以使用同義詞標識的目標物件。
private synonym:存在於某個使用者的模式中,只能為該使用者訪問或者獲得授權可以訪問
同義詞所依賴的物件的使用者。
public synonym:該同義詞對資料庫中所有使用者都可用。
在自己的schema建立private synonym需要create synonym特權。
在其他的schema建立private synonym需要create any synonym特權。
建立public synonym需要create public synonym特權。
語法格式:
create [ or replace ] [ public ] synonym_name
[ schema. ] synonym_name
for [ schema. ] object [ @ dblink ] ;
建立,使用,刪除public synonym
SQL> desc scott.acctmanager
Name Type Nullable Default Comments
------- ------------ -------- ------- --------
AMID CHAR(4)
AMFIRST VARCHAR2(12)
AMLAST VARCHAR2(12)
AMEDATE DATE Y SYSDATE
AMSAL NUMBER(8,2) Y
AMCOMM NUMBER(7,2) Y 0
REGION CHAR(2) Y
SQL> create public synonym manager for scott.acctmanager;
同義詞已建立。
SQL> conn hr/hr
已連線。
SQL> select * from manager;
select * from manager
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
因為不沒有對同義詞所依賴的物件的訪問許可權。
SQL> conn scott
輸入口令:
已連線。
SQL> grant all on acctmanager to hr;
授權成功。
給hr使用者授予對錶acctmanager 的所有許可權。
SQL> conn hr/hr
已連線。
SQL> select count(*) from manager;
COUNT(*)
----------
1
SQL> delete from manager;
已刪除 1 行。
使用同義詞執行DML操作。
SQL> rollback;
回退已完成。
SQL> conn scott/TIGER
已連線。
再次切換到scott使用者,撤銷所有對物件acctmanager的操作許可權。
SQL> revoke all on acctmanager from hr;
撤銷成功。
授權給hr使用者對同義詞manager所有的操作許可權。
SQL> grant all on manager to hr;
授權成功。
SQL> conn hr/hr
已連線。
SQL> update manager
2 set amsal=7000
3 where amid='0001';
已更新 1 行。
從上面可以看出對同義詞相應授權就是對同義詞所依賴的目標物件的授權。
SQL> conn system as sysdba
輸入口令:
已連線。
SQL> drop synonym manager;
drop synonym manager
*
第 1 行出現錯誤:
ORA-01434: 要刪除的專用同義詞不存在
刪除public synonym的時候需要新增關鍵字public
SQL> drop public synonym manager;
同義詞已刪除。
建立,使用,刪除private synonym
SQL> conn hr/hr
已連線。
SQL> create synonym emp for employees;
同義詞已建立。
把emp所依賴的目標的所有操作特權授予scott使用者。
SQL> grant all on emp to scott;
授權成功。
SQL> conn scott/TIGER
已連線。
SQL> select count(*)
2 from emp;
from emp
*
第 2 行出現錯誤:
ORA-00942: 表或檢視不存在
SQL> select count(*)
2 from hr.emp;
COUNT(*)
----------
107
因為emp是private synonym需要新增shema字首。
使用同義詞執行DML操作。
SQL> update hr.emp
2 set salary=30000
3 where employee_id=100;
已更新 1 行。
SQL> conn hr/hr
已連線。
SQL> drop synonym emp;
同義詞已刪除。
刪除private synonym與刪除public synonym的方式不同。
在oracle中使用同義詞尋找物件的步驟是:
1、首先查詢與同義詞同名的物件是否存在於當前的shema中。
2、根據給定的同義詞查詢私有同義詞是否存在於當前的shema中。
3、如果私有同義詞沒有找到,根據給定的同義詞查詢公有同義詞。
4、如果沒有找到公有同義詞,oracle資料庫會報錯。
SQL> conn system as sysdba
輸入口令:
已連線。
SQL> create public synonym people for scott.acctmanager;
同義詞已建立
SQL> grant all on people to hr;
授權成功。
SQL> conn hr/hr
已連線。
SQL> create table people(id char(12),name varchar2(30),sex char(1) check (sex in ('f','m')));
表已建立。
SQL> insert into people values('0001','zhangsan','m');
已建立 1 行。
SQL> select count(*) from people;
COUNT(*)
----------
1
從上面兩條sql語句可以證明:首先查詢與同義詞同名的物件是否存在於當前的shema中。
SQL> drop table people;
表已刪除。
SQL> select count(*)
2 from people;
COUNT(*)
----------
1
SQL> create synonym people for employees;
同義詞已建立。
SQL> select count(*) from people;
COUNT(*)
----------
107
注:hr 中的employees中有107條記錄。
從上面的一段sql語句可以證明:
如果私有同義詞在當前shema中沒有找到,根據給定的同義詞查詢公有同義詞。
根據給定的同義詞查詢私有同義詞是否存在於當前的shema中。
SQL> drop public synonym people;
同義詞已刪除。
SQL> select count(*) from people;
select count(*) from people
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
從上面的sql語句可以證明:
如果沒有找到公有同義詞,oracle資料庫會報錯。
另外同義詞不可以濫用,不然容易引起物件名的混亂。可以使用資料字典dba_synonyms
查詢有關同義詞的相關資訊:
SQL> desc dba_synonyms
名稱 是否為空? 型別
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
SYNONYM_NAME NOT NULL VARCHAR2(30)
TABLE_OWNER VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
DB_LINK VARCHAR2(128)
SQL> create synonym manager for scott.acctmanager;
同義詞已建立。
SQL> select * from dba_synonyms
2 where synonym_name='MANAGER';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
------------------------------ ------------------------------ ------------------------------ ------------------------------ --------------------------------------------------------------------------------
SYSTEM MANAGER SCOTT ACCTMANAGER
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-715853/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 中考常見同義詞和同義短語總結
- [20191122]schama建立同義詞.txt
- 匯出oracle公有同義詞Oracle
- pyhanlp 停用詞與使用者自定義詞典功能詳解HanLP
- 6.5. 常用物件——6.5.4. 同義詞物件
- 自動為新建的表建立同義詞
- 同義詞相似度可以怎樣計算
- 【學習】SQL基礎-017-同義詞SQL
- Elasticsearch:使用同義詞 synonyms 來提高搜尋效率Elasticsearch
- oralce 跨使用者訪問表 同義詞
- MapReduce實現與自定義詞典檔案基於hanLP的中文分詞詳解HanLP中文分詞
- HanLP-實詞分詞器詳解HanLP分詞
- Hanlp分詞之CRF中文詞法分析詳解HanLP分詞CRF詞法分析
- 3.3 以太坊核心詞彙詳解
- JavaScript物件導向名詞詳解JavaScript物件
- Elasticsearch 近義詞詞庫配置Elasticsearch
- C#9新關鍵詞詳解C#
- HanLP分詞命名實體提取詳解HanLP分詞
- oracle學習筆記(十四) 資料庫物件 索引 檢視 序列 同義詞Oracle筆記資料庫物件索引
- Java jvm級別native關鍵詞、JNI詳解JavaJVM
- HanLP 關鍵詞提取演算法分析詳解HanLP演算法
- JVM 堆的定義與詳解JVM
- JavaScript自定義滾動條詳解JavaScript
- Python詞雲庫wordcloud中文顯示問題詳解PythonCloud
- 簡單有效的多標準中文分詞詳解中文分詞
- 詳解SEO布詞以及網站排名優化技巧網站優化
- C/C++的轉義字元詳解C++字元
- 外觀模式(Facade模式)詳解——小馬同學@Tian模式
- Hanlp配置自定義詞典遇到的問題與解決方法HanLP
- 自然語言處理工具hanlp自定義詞彙新增圖解自然語言處理HanLP圖解
- Flutter完整開發實戰詳解(十六、詳解自定義佈局實戰)Flutter
- hanlp原始碼解析之中文分詞演算法詳解HanLP原始碼中文分詞演算法
- es 自定義分詞外掛分詞
- 大資料---單詞釋義大資料
- 語義分割網路 U-Net 詳解
- boilerplate 詞解
- elasticsearch之ik分詞器和自定義詞庫實現Elasticsearch分詞
- day88-ElasticSearch-分詞- 自定義擴充套件詞庫Elasticsearch分詞套件
- 【前端詞典】F5 同 Ctrl+F5 的區別你可瞭解前端