oracle 数据库模式对象,索引,序列,同义词,查看用户拥有的表,聚簇,数据库链接
數據庫模式對象:
Oracle數據庫的索引
索引(INDEX)是為了加快數據的查找而創建的數據庫對象,特別是對大表,索引可以有效地提高查找速度,也可以保證數據的惟一性。索引是由Oracle自動使用和維護的,一旦創建成功,用戶不必對索引進行直接的操作。索引是獨立于表的數據庫結構,即表和索引是分開存放的,當刪除索引時,對擁有索引的表的數據沒有影響。
在創建PRIMARY KEY和UNIQUE約束條件時,系統將自動為相應的列創建惟一(UNIQUE)索引。索引的名字同約束的名字一致。
索引有兩種:B*樹索引和位圖(BITMAP)索引。
B*樹索引是通常使用的索引,也是默認的索引類型。在這里主要討論B*樹索引。B*樹是一種平衡2叉樹,左右的查找路徑一樣。這種方法保證了對表的任何值的查找時間都相同。
B*樹索引可分為:惟一索引、非惟一索引、一列簡單索引和多列復合索引。
創建索引一般要掌握以下原則:只有較大的表才有必要建立索引,表的記錄應該大于50條,查詢數據小于總行數的2%~4%。雖然可以為表創建多個索引,但是無助于查詢的索引不但不會提高效率,還會增加系統開銷。因為當執行DML操作時,索引也要跟著更新,這時索引可能會降低系統的性能。一般在主鍵列或經常出現在WHERE子句或連接條件中的列建立索引,該列稱為索引關鍵字。
索引的創建
創建索引不需要特定的系統權限。建立索引的語法如下:
CREATE [{UNIQUE|BITMAP}] INDEX 索引名 ON 表名(列名1[,列名2,...]);
其中:
UNIQUE代表創建惟一索引,不指明為創建非惟一索引。
BITMAP 代表創建位圖索引,如果不指明該參數,則創建B*樹索引。
列名是創建索引的關鍵字列,可以是一列或多列。
刪除索引的語法是:
DROP INDEX 索引名;
刪除索引的人應該是索引的創建者或擁有DROP ANY INDEX系統權限的用戶。索引的刪除對表沒有影響。
創建和刪除索引。
步驟1:創建索引:
執行結果:
索引已創建。
步驟2:查詢中引用索引:
步驟3:刪除索引:
執行結果:
索引已丟棄。
說明:本例創建的是B*樹非惟一簡單索引。索引關鍵字列是ENAME。在步驟2中,因為WHERE條件中出現了索引關鍵字,所以查詢中索引會被自動引用,但是由于行數很少,因此不會感覺到查詢速度的差別。
創建復合索引。
步驟1:創建復合索引:
執行結果:
索引已創建。
步驟2:查詢中引用索引:
說明:在本例中創建的是包含兩列的復合索引。JOB是主鍵,SAL是次鍵。WHERE條件中引用了JOB和SAL,而且是按照索引關鍵字出現的順序引用的,所以在查詢中,索引會被引用。
如下的查詢也會引用索引:
但以下查詢不會引用索引,因為沒有先引用索引關鍵字的主鍵:
查看索引
通過查詢數據字典USER_INDEXES可以檢查創建的索引。
通過查詢數據字典USER_IND_COLUMNS可以檢查索引的列。
顯示emp表的索引:
執行結果:
說明:由本訓練可見,emp表共有兩個索引,其中EMP_JOBSAL是剛剛創建的,屬于非惟一索引。PK_EMP為生成主鍵時系統創建的索引,屬于惟一索引。
顯示索引的列。
執行結果:
說明:該查詢顯示出索引“EMP_JOBSAL”擁有兩列:JOB和SAL。
序列的創建
序列(SEQUENCE)是序列號生成器,可以為表中的行自動生成序列號,產生一組等間隔的數值(類型為數字)。其主要的用途是生成表的主鍵值,可以在插入語句中引用,也可以通過查詢檢查當前值,或使序列增至下一個值。
創建序列需要CREATE SEQUENCE系統權限。序列的創建語法如下:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
其中:
INCREMENT BY 用于定義序列的步長,如果省略,則默認為1,如果出現負值,則代表序列的值是按照此步長遞減的。
START WITH 定義序列的初始值(即產生的第一個值),默認為1。
MAXVALUE 定義序列生成器能產生的最大值。選項NOMAXVALUE是默認選項,代表沒有最大值定義,這時對于遞增序列,系統能夠產生的最大值是10的27次方;對于遞減序列,最大值是-1。
MINVALUE定義序列生成器能產生的最小值。選項NOMAXVALUE是默認選項,代表沒有最小值定義,這時對于遞減序列,系統能夠產生的最小值是?10的26次方;對于遞增序列,最小值是1。
CYCLE和NOCYCLE 表示當序列生成器的值達到限制值后是否循環。CYCLE代表循環,NOCYCLE代表不循環。如果循環,則當遞增序列達到最大值時,循環到最小值;對于遞減序列達到最小值時,循環到最大值。如果不循環,達到限制值后,繼續產生新值就會發生錯誤。
CACHE(緩沖)定義存放序列的內存塊的大小,默認為20。NOCACHE表示不對序列進行內存緩沖。對序列進行內存緩沖,可以改善序列的性能。
刪除序列的語法是:
DROP SEQUENCE 序列名;
刪除序列的人應該是序列的創建者或擁有DROP ANY SEQUENCE系統權限的用戶。序列一旦刪除就不能被引用了。
序列的某些部分也可以在使用中進行修改,但不能修改SATRT WITH選項。對序列的修改只影響隨后產生的序號,已經產生的序號不變。修改序列的語法如下:
ALTER SEQUENCE 序列名
[INCREMENT BY n]
[{MAXVALUE n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
創建和刪除序列。
步驟1:創建序列:
執行結果:
序列已創建。
步驟2:刪除序列:
執行結果:
序列已丟棄。
說明:以上創建的序列名為ABC,是遞增序列,增量為1,初始值為10。該序列不循環,不使用內存。沒有定義最小值,默認最小值為1,最大值為9 999 999。
序列的使用
如果已經創建了序列,怎樣才能引用序列呢?方法是使用CURRVAL和NEXTVAL來引用序列的值。
調用NEXTVAL將生成序列中的下一個序列號,調用時要指出序列名,即用以下方式調用:
序列名.NEXTVAL
CURRVAL用于產生序列的當前值,無論調用多少次都不會產生序列的下一個值。如果序列還沒有通過調用NEXTVAL產生過序列的下一個值,先引用CURRVAL沒有意義。調用CURRVAL的方法同上,要指出序列名,即用以下方式調用:
序列名.CURRVAL.
產生序列的值。
步驟1:產生序列的第一個值:
執行結果:
?
步驟2:產生序列的下一個值:
執行結果:
?
步驟3:產生序列的當前值:
執行結果:
?
說明:第一次調用NEXTVAL產生序列的初始值,根據定義知道初始值為10。第二次調用產生11,因為序列的步長為1。調用CURRVAL,顯示當前值11,不產生新值。
序列的應用:產生圖書序列號。
步驟1:創建序列:
執行結果:
序列已創建。
步驟2:使用序列生成新的圖書編號:
執行結果:
Sql代碼
A0001 計算機原理?????? 01 劉勇???? 5?????? 25.3
A0002? C語言程序設計? 02 馬麗??? 1????? 18.75
A0003 匯編語言程序設計? 02 黃海明??? 15????? 20.18
A0005 軟件工程?????? 01 馮娟?????? 5????? 27.3
A0010 多媒體制作??? 01 高建????? 3????? 28
A0011 網頁制作精選? 01 劉瑩???? 4????? 26.5
說明:根據序列定義可知,序列產生的初始值為10,函數TO_CHAR將數字10轉換為字符。格式字符串“fm0000”表示轉換為4位的字符串,空位用0填充。fm表示去掉轉換結果的空格。故10將被轉換成為字符串“0010”。連接運算后的圖書編號為“A0010”。第二次調用則產生“A0011”,以此類推。
注意:通過查詢看到插入的序號是連續的,但如果在插入的過程中使用了回退或發生了系統崩潰等情況,可能會產生序號的間隔。
查看序列
同過數據字典USER_OBJECTS可以查看用戶擁有的序列。
通過數據字典USER_SEQUENCES可以查看序列的設置。
【訓練1】? 查看用戶的序列:
SELECT SEQUENCE_NAME,MIN_VALUE,MAX_VALUE,INCREMENT_BY,LAST_NUMBER FROM
USER_SEQUENCES;
執行結果:
? 說明:當前用戶擁有兩個序列:ABC和BOOKID。
同義詞:
模式對象的同義詞
?? 同義詞(SYNONYM)是為模式對象起的別名,可以為表、視圖、序列、過程、函數和包等數據庫模式對象創建同義詞。同義詞有兩種:公有同義詞和私有同義詞。公有同義詞是對所有用戶都可用的。創建公有同義詞必須擁有系統權限CREATE PUBLIC SYNONYM;創建私有同義詞需要CREATE SYNONYM系統權限。私有同義詞只對擁有同義詞的賬戶有效,但私有同義詞也可以通過授權,使其對其他用戶有效。同義詞通過給本地或遠程對象分配一個通用或簡單的名稱,隱藏了對象的擁有者和對象的真實名稱,也簡化了SQL語句。
如果同義詞同對象名稱重名,私有同義詞又同公有同義詞重名,那么,識別的順序是怎樣的呢?如果存在對象名,則優先識別,其次識別私有同義詞,最后識別公有同義詞。比如,執行以下的SELECT語句:
SELECT * FROM ABC;
如果存在表ABC,就對表ABC執行查詢語句;如果不存在表ABC,就去查看是否有私有同義詞ABC,如果有就對ABC執行查詢(此時ABC是另外一個表的同義詞);如果沒有私有同義詞ABC,則去查找公有同義詞;如果找不到,則查詢失敗。
同義詞的創建和使用
同義詞的創建語法如下:
CREATE [PUBLIC] SYNONYM 同義詞名
FOR [模式名.]對象名[@數據庫鏈路名];
其中:
PUBLIC代表創建公有同義詞,若省略則代表創建私有同義詞。
模式名代表擁有對象的模式賬戶名。
數據庫鏈路名是指向遠程對象的數據庫鏈接。
刪除同義詞的語法如下
DROP SYNONYM 同義詞名;
刪除同義詞的人必須是同義詞的擁有者或有DROP ANY SYNONYM權限的人。刪除同義詞不會刪除對應的對象。
創建同義詞
步驟1:創建私有同義詞:
執行結果:
同義詞已創建。
步驟2:創建公有同義詞(先要獲得創建公有同義詞的權限):
執行結果:
同義詞已創建。
步驟3:使用同義詞:
執行結果:
? 說明:對“BOOK”的查詢等效于對“圖書”的查詢。如果同義詞只是用戶自己使用,則對象名前的模式名可以省略,如步驟1。如果是為其他用戶使用,則必須添加模式名,如步驟2。
同義詞的查看
通過查詢數據字典USER_OBJECTS和USER_SYNONYMS,可以查看同義詞信息。?
查看用戶擁有的同義詞:
執行結果:
系統定義同義詞
系統為常用的對象預定義了一些同義詞,利用它們可以方便地訪問用戶的常用對象。這些同義詞如下所示。
查看用戶擁有的表:
聚簇
所謂聚簇(CLUSTER),形象地說,就是生長在一起的表。聚簇包含一張或多張表,表的公共列被稱為聚簇關鍵字,在公共列上具有同一值的列物理上存儲在一起。那么在什么情況下需要創建聚簇呢?通常在多個表有共同的列時,應使用聚簇。比如有一張學生基本情況表,其中包含學生的學號、姓名、性別、住址等信息。另外,還設計了一張學生成績表,其中除了包含學生成績,也包含學生的學號、姓名、性別。那么這兩張表共同的列就可以創建成聚簇。這樣兩張表的共同的學號、姓名和性別,就存放在了一起,相同的值只存放一次。如果兩個表通過聚簇列進行聯合,則會大大提高查詢的速度,但對于插入等操作則會降低效率。
創建聚簇后,要創建使用聚簇的表,對聚簇還應該建立索引。如果不對聚簇建立索引,則不能對聚簇表進行插入、修改和刪除操作。
創建聚簇需要CREATE CLUSTER系統權限。創建聚簇的語法如下:
CREATE CLUSTER 聚簇名(列名1 [,列名2]...)
SIZE n
TABLESPACE 表空間名;
列名是構成聚簇關鍵字的列集合。
SIZE 指明存儲所有含有相同聚簇關鍵字的行的平均存儲空間數(聚簇邏輯塊的大小)。
TABLESPACE定義聚簇使用的表空間。
刪除聚簇使用如下語法:
DROP CLUSTER 聚簇名 [INCLUDING TABLES [CASCADE CONSTRAINTS]];
其中:
INCLUDING TABLES表示一同刪除聚簇表。如果不指明此選項,則必須手工刪除聚簇表后才能刪除聚簇本身。
CASCADE CONSTRAINTS表示刪除聚簇表時,一起刪除同其他表之間的約束關系。
創建和使用聚簇。
步驟1:創建聚簇:
執行結果:
已創建數據簇。
步驟2:創建第一張聚簇表:
執行結果:
表已創建。
步驟3:創建第二張聚簇表:
執行結果:
表已創建。
步驟4:為聚簇創建索引:
步驟5:向表中插入數據:
執行結果:略。
步驟6:刪除聚簇及聚簇表:
執行結果:
數據簇已丟棄。
說明:在本例的兩個表中,為其三個共同列STUNO、STUNAME和SEX創建了聚簇,在創建表時說明了使用的聚簇,創建聚簇后為其創建了索引,然后插入了一些數據。
數據庫鏈接
數據庫鏈接(DATABASE LINK)是在分布式環境下,為了訪問遠程數據庫而創建的數據通信鏈路。數據庫鏈接隱藏了對遠程數據庫訪問的復雜性。通常,我們把正在登錄的數據庫稱為本地數據庫,另外的一個數據庫稱為遠程數據庫。有了數據庫鏈接,可以直接通過數據庫鏈接來訪問遠程數據庫的表。常見的形式是訪問遠程數據庫固定用戶的鏈接,即鏈接到指定的用戶,創建這種形式的數據庫鏈接的語句如下:
CREATE DATABASE LINK 鏈接名 CONNECT TO 賬戶 IDENTIFIED BY 口令
USING 服務名;
創建數據庫鏈接,需要CREATE DATABASE LINK系統權限。
數據庫鏈接一旦建立并測試成功,就可以使用以下形式來訪問遠程用戶的表。
表名@數據庫鏈接名
在局域網上創建和使用數據庫鏈接。
步驟1:創建遠程數據庫的服務名,假定局域網上另一個數據庫服務名為MYDB_REMOTE。
步驟2:登錄本地數據庫SCOTT賬戶,創建數據庫鏈接:
執行結果為:
數據庫鏈接已創建。
步驟3:查詢遠程數據庫的數據:
結果略。
步驟4:一個分布查詢:
結果略。
說明:在本例中,遠程數據庫服務名是MYDB_REMOTE,創建的數據庫鏈接名稱是abc.emp@abc表示遠程數據庫的emp表。步驟4是一個聯合查詢,數據來自本地服務器的dept表和遠程服務器的emp表。
總結
以上是生活随笔為你收集整理的oracle 数据库模式对象,索引,序列,同义词,查看用户拥有的表,聚簇,数据库链接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电话拨号器的实现
- 下一篇: linux cmake编译源码,linu