詳解同義詞(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle中的同義詞SYNONYMOracle
- Oracle之處理synonym同義詞無效物件Oracle物件
- 使用datapump 匯出匯入同義詞(export and import synonym using datapump)ExportImport
- 【Oracle】-【同義詞】-public與非public同義詞Oracle
- oracle11g同義詞synonym建立及授權且刪除相關測試Oracle
- 物件、同義詞和公有同義詞順序選取物件
- 授權與同義詞
- ORACLE公有/私有同義詞Oracle
- 中考常見同義詞和同義短語總結
- 匯出oracle公有同義詞Oracle
- Oracle同義詞建立方法Oracle
- 多層巢狀同義詞巢狀
- Oracle同義詞 kingsql作品OracleSQL
- 官檔同義詞學習
- 匯出Oracle中的同義詞Oracle
- SYS查詢不到的同義詞
- 資料庫鏈與同義詞資料庫
- Oracle同義詞建立方法(轉)Oracle
- pyhanlp 停用詞與使用者自定義詞典功能詳解HanLP
- 6.5. 常用物件——6.5.4. 同義詞物件
- Oracle資料庫開發——同義詞Oracle資料庫
- 同義詞相似度可以怎樣計算
- 同義詞The schema object cannot be contained in a package.ObjectAIPackage
- 學習筆記 過程、同義詞、序列筆記
- Elasticsearch:使用同義詞 synonyms 來提高搜尋效率Elasticsearch
- 【學習】SQL基礎-017-同義詞SQL
- Oracle——04同義詞與資料庫連結Oracle資料庫
- MapReduce實現與自定義詞典檔案基於hanLP的中文分詞詳解HanLP中文分詞
- HanLP-實詞分詞器詳解HanLP分詞
- Oracle基礎 12 物件 objects 同義詞/序列/試圖/索引Oracle物件Object索引
- 10g ALL_SYNONYMS同義詞查詢效能下降
- 實驗:用檢視加同義詞實現資料安全
- PL/SQL:ORA-00980同義詞轉換不再有效SQL
- Oracle資料鏈+同義詞+訪問遠端資料庫Oracle資料庫
- Hanlp分詞之CRF中文詞法分析詳解HanLP分詞CRF詞法分析
- ORACLE817上對同義詞執行DESC出現CORE DUMPOracle
- 【Oracle】v$表和v_$同義詞的訪問許可權Oracle訪問許可權
- 在全文索引中同義詞的使用(SQL SERVER 2005)索引SQLServer