一、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