Oracle學習筆記九 數據庫對象

Oracle 數據庫對象又稱模式對象,數據庫對象是邏輯結構的集合,最基本的數據庫對象是表。數據庫

其餘數據庫對象包括:安全

 

 

 同義詞

 

同義詞是現有對象的一個別名。它的做用有:函數

  1.簡化SQL語句性能

  2.隱藏對象的名稱和全部者(隱藏原始對象內容)spa

  3.提供對對象的公共訪問code

 

 

同義詞共有兩種類型:對象

 

 

公有同義詞可被全部的數據庫用戶訪問。索引

私有同義詞只能在其模式內訪問,且不能與當前模式的對象同名。內存

 

建立或替換現有同義詞ci

create or replace synonym emp_syn for scott.emp;

 

刪除同義詞

drop synonym emp;
drop public synonym emp_syn

 

 

使用同義詞

Create public synonym Newer for scott.emp2;
Select * from Newer ;

 序列

序列是用於生成惟1、連續序號的對象,序列能夠是升序的,也能夠是降序的,能夠用於表示數據的數量。咱們可使用CREATE SEQUENCE語句建立序列。

複製代碼

Create sequence 序列名
    Start with 1             --指序列開始大小,默認爲1
    Increment by 1           --每次的增量,默認爲1
    Maxvalue 2000            --序列的最大數
    Minvalue 1               --序列的最小數
    Nocycle                  --當序列最大了將再也不生成整數(默認)
    Cache 10;                 --保留在內存中整數的個數,默認20    

複製代碼

 注意:序列在使用的時候,若是給的是主鍵,爲防止出現不連續的狀況,應該設置爲NOCACHE。

 

從user_sequences中查出全部的序列信息。

select * from user_sequences;

 

經過序列的僞列來訪問序列的值

1.NEXTVAL 返回序列的下一個值

2.CURRVAL 返回序列的當前值

注意:序列在使用的時候,若是給的是主鍵,爲防止出現不連續的狀況,應該設置爲NOCACHE。

INSERT INTO toys (toyid, toyname, toyprice) 
     VALUES ( toys_seq.NEXTVAL, ‘TWENTY’, 25);
INSERT INTO toys (toyid, toyname, toyprice) 
     VALUES ( toys_seq.NEXTVAL, ’MAGIC PENCIL’, 75);
--toys_seq.NEXTVAL  指定序列的下一個值

 

SELECT toys_seq.CURRVAL FROM dual;  --檢索序列的當前值

 

使用ALTER SEQUENCE語句修改序列,不能更改序列的START WITH參數

ALTER SEQUENCE toys_seq MAXVALUE 5000 CYCLE;

 

使用DROP SEQUENCE語句刪除序列

DROP SEQUENCE toys_seq;

 

視圖

視圖以通過定製的方式顯示來自一個或多個表的數據,視圖能夠視爲「虛擬表」或「存儲的查詢」,建立視圖所依據的表稱爲「基表」。

 

視圖的優勢有:

1.提供了另一種級別的表安全性

2.隱藏的數據的複雜性

3.簡化的用戶的SQL命令

4.隔離基表結構的改變

5.經過重命名列,從另外一個角度提供數據

 

例:

 

 

CREATE VIEW stud_view AS SELECT studno, studname, subno FROM Stud_details;

 經過這個視圖,查詢到的結果:

 

建立視圖

建立視圖的語法:

複製代碼

CREATE [OR REPLACE] [FORCE] VIEW
    view_name [(alias[, alias]...)] 
  AS select_statement
  [WITH CHECK OPTION][CONSTRAINT C_NAME]
  [WITH READ ONLY];  --禁止對錶進行更新刪除操做
--W ITH CHECK OPTION CONSTRAINT _NAME :表示增長一個檢查約束,INSERT和UPDATE時候必需要求: 
--INSERT時候要求插入的數據必須符合定義時候設置的where條件一致,UPDATE 時候只能改除where條件列之外的其餘數據列或者修改的條件列的值符合where條件
--

複製代碼

 

使用 WITH CHECK OPTION 選項建立視圖

create or replace view pause_view as
  select * from order_master WHERE ostatus = 'p'
  with check option constaint chk_pv;

 

使用 ORDER BY 子句建立視圖

 

create or replace view ord_ven as
  select * from vendor_master order by venname;

 

 

聯接視圖:兩個表的結果

create view Stud_sub_view as
    select Studno, Studname, Submrks, Subname
    from Stud_details, Sub_Details 
    where Stud_details.Subno=Sub_details.Subno;

 

 

建立外聯接視圖

CREATE VIEW ven_ord_outj_view AS
SELECT vm.vencode, venname, orderno, odate, ostatus
FROM   vendor_master vm, order_master om
WHERE  vm.vencode = om.vencode(+);

 等同於

SELECT vm.vencode, venname, orderno, odate, ostatus
FROM vendor_master vm LEFT OUTER JOIN order_master om
ON vm.vencode = om.vencode;

 

 

視圖上的DML語句

在視圖上也可使用修改數據的DML語句,如INSERT、UPDATE和DELETE

 

視圖上的DML語句有以下限制:

1.只能修改一個底層的基表

2.若是修改違反了基表的約束條件,則沒法更新視圖

3.若是視圖包含鏈接操做符、DISTINCT 關鍵字、集合操做符、聚合函數或 GROUP BY 子句,則將沒法更新視圖

4.若是視圖包含僞列或表達式,則將沒法更新視圖

 

若是往視圖中添加數據,數據能夠添加到基表,但若是插入的數據不符合視圖的where等條件的要求,則視圖中不會顯示。若是但願插入的數據要符合視圖定義的時候,where要確則須要添加參數。

 

若是要從視圖中刪除基表的數據,被刪除的這條數據必須符合視圖的查詢條件,才能經過視圖刪除該數據。

鍵保留表

鍵保留表是理解鏈接視圖修改限制的一個基本概念。該表的主鍵列所有顯示在視圖中,而且它們的值在視圖中都是惟一且非空的。也就是說,表的鍵值在一個鏈接視圖中也是鍵值,那麼就稱這個表爲鍵保留表。

 

由於 Studno 既是Stud_details 中的主鍵,也是聯接結果中的主鍵,所以Stud_details是鍵保留表

 

視圖中的函數

視圖中可使用單行函數、分組函數和表達式

CREATE VIEW item_view AS 
    SELECT itemcode, LOWER(itemdesc) item_desc
    FROM itemfile;

 

刪除視圖

使用DROP VIEW語句刪除視圖

DROP VIEW toys_view;

 

索引

索引是與表相關的一個可選結構,使用索引能夠提升 SQL 語句執行的性能,減小磁盤I/O,索引在邏輯上和物理上都獨立於表的數據,Oracle 可以自動維護索引。

 

索引的原理:索引的工做原理是與一個叫作ROWID的概念緊密相關的,Oracle在建立數據表時,默認會爲每一個數據表創建一個隱含字段,叫ROWID。在向數據表中插入記錄時,系統將自動爲每條記錄分配唯一的一個ROWID號,利用這個ROWID號,就能夠快速定位到記錄。

 

操做索引

使用 CREATE INDEX 語句建立索引:

建立標準索引:Create index 索引名 on 表名(列名);

CREATE INDEX item_index ON itemfile (itemcode)
     TABLESPACE index_tbs;

 

重建索引

ALTER INDEX item_index REBUILD;

 

刪除索引

DROP INDEX item_index;

 

索引的類型

索引有各類類型,除了標準索引外,還有一些特殊類型的索引:

 

 

惟一索引

惟一索引確保在定義索引的列中沒有重複值,Oracle 自動在表的主鍵列上建立惟一索引

使用CREATE UNIQUE INDEX語句建立惟一索引

CREATE UNIQUE INDEX item_index
     ON itemfile (itemcode);

 組合索引

組合索引是在表的多個列上建立的索引,索引中列的順序是任意的,若是 SQL 語句的 WHERE 子句中引用了組合索引的全部列或大多數列,則能夠提升檢索速度。

CREATE INDEX comp_index
     ON itemfile(p_category, itemrate);

 反向鍵索引

反向鍵索引反轉索引列鍵值的每一個字節,一般創建在值是連續增加的列上,可使數據均勻地分佈在整個索引上

建立索引時使用REVERSE關鍵字

CREATE INDEX rev_index 
     ON itemfile (itemcode) REVERSE;

 

ALTER INDEX rev_index REBUID NOREVERSE;

位圖索引

位圖索引適合建立在低基數列上,位圖索引不直接存儲ROWID,而是存儲字節位到ROWID的映射,使用位圖索引能夠減小響應時間,節省空間佔用。

CREATE BITMAP INDEX bit_index
     ON order_master (orderno);

 

索引組織表

索引組織表的數據存儲在與其關聯的索引中,索引中存儲的是行的實際數據,而不是ROWID,它基於主鍵訪問數據。

CREATE TABLE 命令與 ORGANIZATION INDEX 子句一塊兒用於建立索引組織表。

CREATE TABLE ind_org_tab (
       vencode NUMBER(4) PRIMARY KEY,
       venname VARCHAR2(20)
     ) 
     ORGANIZATION INDEX;

 

普通表與索引組織表的比較

普通表

索引組織表

ROWID 惟一地標識行

主鍵惟一地標識行

隱式的 ROWID 列

沒有隱式的 ROWID 列

基於 ROWID 的訪問

基於主鍵的訪問

順序掃描返回全部行

徹底索引掃描返回全部行,並按主鍵順序排列

支持分區

不支持分區

 

基於函數的索引

基於一個或多個列上的函數或表達式建立的索引,表達式中不能出現聚合函數,不能在LOB類型的列上建立,建立時必須具備 QUERY REWRITE 權限,當查詢使用了函數的時候,索引將再也不使用,因此要創建函數索引。

CREATE INDEX lowercase_idx 
     ON toys (LOWER(toyname));

 

SELECT toyid FROM toys
     WHERE LOWER(toyname)='doll';

 

 

索引中的分區

咱們能夠將索引存儲在不一樣的分區中。

 

與分區有關的索引有三種類型:

1.局部分區索引 - 在分區表上建立的索引,在每一個表分區上建立獨立的索引,索引的分區範圍與表一致

2.全局分區索引 - 在分區表或非分區表上建立的索引,索引單獨指定分區的範圍,與表的分區範圍或是否分區無關

3.全局非分區索引 - 在分區表上建立的全局普通索引,索引沒有被分區

 

獲取索引的信息

與索引有關的數據字典視圖有:

1.USER_INDEXES - 用戶建立的索引的信息

2.USER_IND_PARTITIONS - 用戶建立的分區索引的信息

3.USER_IND_COLUMNS - 與索引相關的表列的信息

SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME
     FROM USER_IND_COLUMNS
     ORDER BY INDEX_NAME, COLUMN_POSITION;
相關文章
相關標籤/搜索