樂(lè)都區(qū)公司網(wǎng)站建設(shè)網(wǎng)站統(tǒng)計(jì)數(shù)據(jù)
一、Oracle數(shù)據(jù)只有一個(gè)實(shí)例(簡(jiǎn)單理解就是Oracle 只能建立一個(gè)數(shù)據(jù)庫(kù),不像MySQL,它下面可以創(chuàng)建N個(gè)庫(kù)),那么Oracle是根據(jù)用戶靈活去管理的;這點(diǎn)讀起來(lái)、理解
起來(lái)也不那么難,但是除非自己親自實(shí)現(xiàn)一把才理解深入點(diǎn),剛接觸數(shù)據(jù)庫(kù)可能不是很理解這些;
二、Oracle中可以建立多個(gè)用戶,那么這些用戶剛建立是得授權(quán)的,不讓沒(méi)有權(quán)限做任何事情,(舉個(gè)栗子:用戶 ‘AA’ 是授權(quán)的DBA用戶,此用戶下面有 N 張表,如果再創(chuàng)建
一個(gè)用戶 “BB” ,那么 “BB” 是沒(méi)有權(quán)限讀取 “AA” 中表的,有人可能就會(huì)說(shuō)給他授權(quán)不就行了么,給 “BB” 授予超級(jí)權(quán)限,抱歉,那也不行,你同樣么有機(jī)會(huì)訪問(wèn) “AA”
中的表的,你雖然授予了超級(jí)權(quán)限,那是在你名下的,在 “AA” 起不了作用),是不是很是揪心,同一個(gè)庫(kù)下兩個(gè) 超級(jí)用戶 還不能訪問(wèn)。
三、是不是在 “BB” 用戶下在把 “AA” 下的表 復(fù)制一遍不就好了,沒(méi)錯(cuò),這樣也能實(shí)現(xiàn),但是這樣會(huì)浪費(fèi)很多資源,而且不能同步數(shù)據(jù);這種情況下 同義詞 就有用武之地了,
其實(shí) ?同義詞 也相當(dāng)于一個(gè)視圖 可以這個(gè)么理解,可以進(jìn)行對(duì)表的 增刪改查,(省資源,數(shù)據(jù)同步);
四、注意事項(xiàng)
0》接上面的舉例子:新建的用戶 “BB” 要在不復(fù)制資源的請(qǐng)款下建立一個(gè)同義詞 要可以對(duì) “AA” 下的表 操作(除了刪除)
建立:
create 【public】 ?synonym 同義詞名稱(一般可以與表名不同,這樣不容易混淆) for AA.table_name;
--在當(dāng)前用戶下建立一個(gè)同義詞(去同義“AA”中的表:table_name,public的是可選參數(shù),本人建議盡量建立公用的 同義詞)
刪除:DROP ? 【public】 ? SYNONYM ? 同義詞名稱;
---------此處特別注意 關(guān)鍵字 public 的存在--------;
查看:
select * from ? ?user_synonyms ?sy ?where sy.synonym_name ='A_CODEMAPPING';
?--查看私有的同義詞,自己看到自己創(chuàng)建的;
select * from ? ?all_synonyms sy ?where sy.synonym_name ='A_CODEMAPPING';
?--可以查看到 某某創(chuàng)建的 公共的 同義詞
參看信息中包括,同義詞擁有者,表?yè)碛姓?#xff0c;是否public的等信息;
1》同義詞 分為私有的 和公共的兩種;
私有的:
也只有 本用戶使用,包括別的用戶查不到 用戶 “BB” 有這個(gè)同義詞(這點(diǎn)很重喲奧);
共有的:
可以被其它的任何用戶使用, 也可以被人家查到,看到這個(gè)同義詞,當(dāng)然最重要的也可以被別的用戶刪除;
什么是同義詞
同義詞相當(dāng)于是對(duì)象的小名,作用是縮短對(duì)象的長(zhǎng)度,便于書(shū)寫(xiě)與訪問(wèn)。
同義詞的創(chuàng)建
假設(shè)有表t_student如圖所示:
為表t_student創(chuàng)建同義詞std
create synonym std
for t_student
此時(shí)使用同義詞std查詢表t_student中所有數(shù)據(jù)
select * from std
查詢結(jié)果:
刪除同義詞
drop synonym std