同義詞與別名(在ORACLE數據庫中)|私有同義詞和公共同義詞
在英語中,同義詞和別名的意思幾乎相同。但在數據庫中,這是兩個不同的東西。特別是在ORACLE數據庫中,兩者的用法是不同的。同義詞用於從另一個模式引用架構或數據庫的對象。所以synonym是一個數據庫對象類型。但別名的出現方式卻不同。這意味著,它們不是數據庫對象。別名用於引用查詢中的表、視圖和列。
同義詞
這些是數據庫對象的一種類型。它們引用數據庫中的其他對象。同義詞最常見的用法是,通過使用另一個名稱來引用獨立架構的對象。但是也可以創建同義詞來引用另一個數據庫的對象(在分佈式數據庫中,使用數據庫鏈接)。表、視圖、函數、過程、包、序列、物化視圖、java類對象和觸發器都可以用作同義詞的引用。同義詞有兩種類型。
- 私有同義詞(只能由創建它們的用戶使用。)
- 公共同義詞(可由具有適當權限的所有用戶使用)
這裡,是在單獨的數據庫中創建同義詞的簡單語法,
創建同義詞myschema.mytable1對於[電子郵件保護]_link1
因為在myschema中,[email protected]\u link1(分佈式數據庫表)有一個同義詞mytable1,所以我們可以使用mytable1輕鬆地引用分佈式數據庫表。我們不需要在任何地方都使用數據庫鏈接的長對象名。
別名
這些只是查詢中視圖、表或列的另一個名稱。它們不是數據庫對象。因此,別名並非在架構/數據庫中的任何地方都有效。它們只在查詢內部有效。讓我們看看這個例子,
選擇tab1.col1作為c1,tab2.col2作為c2
從user1.tab1 tab1,user1.tab2 tab2
其中tab1.col1=tab2.col2
這裡,c1和c2是列別名,用於tab1.col1和tab2.col2;tab1和tab2是表別名,用於user1.table1和user2.table2。所有這些別名僅在此查詢內有效。
同義詞和別名(在ORACLE數據庫中)有什麼區別?同義詞是數據庫對象類型。但是別名只是指查詢中的表、視圖或列的名稱。不是數據庫對象。同義詞可以為表、視圖、函數、過程、包、序列、物化視圖、java類對象類型和觸發器創建。但是別名只用於視圖、表及其列。自從同義詞是一個數據庫對象,它們在模式(私有同義詞)或數據庫(公共同義詞)內有效。但是別名在查詢中有效用過。每個架構需要“create synonym”特權才能創建同義詞。但是沒有使用別名的特權。 |