數據庫中的同義詞synonym


一、Oracle數據只有一個實例(簡單理解就是Oracle 只能建立一個數據庫,不像MySQL,它下面可以創建N個庫),那么Oracle是根據用戶靈活去管理的;這點讀起來、理解 
    起來也不那么難,但是除非自己親自實現一把才理解深入點,剛接觸數據庫可能不是很理解這些;
二、Oracle中可以建立多個用戶,那么這些用戶剛建立是得授權的,不讓沒有權限做任何事情,(舉個栗子:用戶 ‘AA’ 是授權的DBA用戶,此用戶下面有 N 張表,如果再創建
   一個用戶 “BB” ,那么 “BB” 是沒有權限讀取 “AA” 中表的,有人可能就會說給他授權不就行了么,給 “BB” 授予超級權限,抱歉,那也不行,你同樣么有機會訪問 “AA” 
   中的表的,你雖然授予了超級權限,那是在你名下的,在 “AA” 起不了作用),是不是很是揪心,同一個庫下兩個 超級用戶 還不能訪問。
三、是不是在 “BB” 用戶下在把 “AA” 下的表 復制一遍不就好了,沒錯,這樣也能實現,但是這樣會浪費很多資源,而且不能同步數據;這種情況下 同義詞 就有用武之地了,
    其實  同義詞 也相當於一個視圖 可以這個么理解,可以進行對表的 增刪改查,(省資源,數據同步);

四、注意事項
    0》接上面的舉例子:新建的用戶 “BB” 要在不復制資源的請款下建立一個同義詞 要可以對 “AA” 下的表 操作(除了刪除) 
       建立:create 【public】  synonym 同義詞名稱(一般可以與表名不同,這樣不容易混淆) for AA.table_name;--在當前用戶下建立一個同義詞(去同義“AA”中的表:table_name,public的是可選參數,本人建議盡量建立公用的 同義詞)
       刪除:DROP   【public】   SYNONYM   同義詞名稱; ---------此處特別注意 關鍵字 public 的存在--------;
       查看:select * from    user_synonyms  sy  where sy.synonym_name ='A_CODEMAPPING';  --查看私有的同義詞,自己看到自己創建的;
            select * from    all_synonyms sy  where sy.synonym_name ='A_CODEMAPPING';  --可以查看到 某某創建的 公共的 同義詞
            參看信息中包括,同義詞擁有者,表擁有者,是否public的等信息;
    1》同義詞 分為私有的 和公共的兩種;
       私有的:
            也只有 本用戶使用,包括別的用戶查不到 用戶 “BB” 有這個同義詞(這點很重喲奧);
       共有的:
            可以被其它的任何用戶使用, 也可以被人家查到,看到這個同義詞,當然最重要的也可以被別的用戶刪除;

 

什么是同義詞
同義詞相當於是對象的小名,作用是縮短對象的長度,便於書寫與訪問。
同義詞的創建
假設有表s_student如圖所示:


為表t_student創建同義詞std
create synonym std
for t_student
此時使用同義詞std查詢表t_student中所有數據

select * from std
查詢結果:


刪除同義詞
drop synonym std


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM