Oracle簡單總結
1、 索引
① 在關系數據庫表中為了能夠找到數據,表中的每一行都用一個RowID來標識。 RowID告訴數據庫這一行的準確位置,包括所在的文件、該文件中的塊和該塊中的行地址。
② 索引是幫助用戶在表中快速地找到記錄的數據庫結構。它既可以提高數據庫性能,又能夠保證列值的唯一性。
③ 索引如何被創建
a) 自動創建索引:當你為一張表定義主關鍵或唯一性約束條件時一個惟一的索引就已經被創建了。
b) 手動創建索引: 用戶可以自己創建索引。
對一列或多列創建索引
CREATE INDEX index ON table (column[, column]...);
何時需要創建一個索引:
在WHERE語句中該列被經常用到。
該列所包含的值有很大取值範圍。
在WHERE語句中有兩個或兩個以上的列被經常在一起使用的時候。
表很大。
何時不需要創建一個索引:
表很小時。
這列在查詢中不經常用到。
表不斷地被更新。
基於函數的索引:是一個基於表達式的索引,建立於表的列,SQL函數等。
2、 同義詞:
同義詞是一個對象的別名,使用同義詞可以讓多個用戶訪問而不用添加擁有者的名稱作為前綴。同義詞是一個指向Oracl對象的指針,本身不包含自己的數據。
3、 視圖:
視圖是由一個或若幹個基表產生的數據的集合,它不占用存儲空間。
視圖猶如數據庫的窗戶,管理員定義這些“窗戶”的位置後,用戶就只能查看他可以看到的數據。視圖不是數據表,它僅是一些SQL查詢語句的集合,作用是按照不同的要求從數據表中提取不同的數據。
視圖中並沒有存放數據,而僅僅是一條SELECT語句。對用戶而言,如果不告訴是在視圖中操作的話,還以為是在表中工作。使用視圖可以增強數據表的安全性和隱蔽數據的復雜性。
視圖與表不同,視圖是一個虛表,即視圖所對應的數據不進行實際存儲,數據庫中只存儲視圖的定義,對視圖的數據進行操作時,系統根據視圖的定義去操作與視圖相關聯的表。
視圖與表的區別:
相同之處:
1、視圖和表一樣有列組成,其查詢方式與表完全相同。
2、和表一樣,用戶也可以在視圖中插入、更新或刪除數據,在視圖中做這些操作時與在表中是一樣的。
區別:
1、與表不同,視圖中沒有數據,而僅僅是一條SQL查詢語句。按此查詢語句檢索出的數據以表的形式表示。視圖中的列可以在一個或多個基本表中找到。視圖不使用物理存儲位置來存儲數據。
2、視圖的定義(列的安排、授予的權限等等)存儲在數據字典中。對一個視圖進行查詢時,視圖將查詢其基於的表,並且以視圖定義所規定的格式和順序返回值。
3、由於視圖沒有直接相關的物理數據,所以不能像表那樣被索引。
4、子查詢中可以包含復雜的SELECT語句,子查詢不能包含ORDER BY語句。
4、 序列
序列是一種可被多個用戶使用的用於自動產生一系列唯一(有序)數字的數據庫對象。序列是一個共享的對象。通常被用來產生主鍵值。
NEXTVAL返回下一個序列的值。一次返回一個值。
CURRVAL當前的序列值。
每引用一次序列的偽列NEXTVAL,就會按照序列的定義產生一個新的序列碼;而通過序列偽列CURRVAL可以反復利用當前的序列碼。
適用場合:
1、INSERT語句的VALUES子句中
2、SELECT語句中的前面選擇的表列名中
3、UPDATE語句中的SET子句
不適用場合:
1、子查詢
2、視圖定義的查詢中
3、帶有DISTINCT操作符的SELECT語句
4、帶有GROUP BY或ORDER BY子句的SELECT語句
5、SELECT語句的WHERE子句中
6、檢查約束條件中
PL/SQL編程
5、 遊標
遊標是從數據表中提取出來的數據,以臨時表的形式存放在內存中,在遊標中有一個數據指針,在初始狀態下指向的是首記錄,利用fetch語句可以移動該指針,從而對遊標中的數據進行各種操作,然後將操作結果寫回數據表中。
① 遊標的定義
遊標作為一種數據類型,首先必須進行定義,其語法如下。
cursor 遊標名 is select 語句:
cursor是定義遊標的關鍵字,select是建立遊標的數據表查詢命令。
② 遊標的打開
要使用創建好的遊標就要打開遊標,語法形式如下。
open 遊標名;
打開遊標的過程有以下兩個步驟。
1) 、將符合條件的記錄送入內存。
2)、將指針指向第一條記錄
③遊標數據的提取
要提取遊標中的數據,需要使用fetch命令,語法形式如下。
fetch 遊標名 into 變量名1,變量名2,……; 或
fetch 遊標名 into 記錄型變量名;
④遊標的關閉
使用完遊標後,需要關閉遊標,使用close命令,語法形式如下。
close 遊標名
遊標的重要屬性
① %isopen屬性
屬性功能:測試遊標是否打開,如果沒有打開遊標就是用fetch語句並提示錯誤。
② %FOUND
邏輯值,遊標是否找到一條記錄。如遊標找到記錄其值為True,反之為False
③ %NOTFOUND
邏輯值,遊標沒有找到記錄,是%FOUND屬性的邏輯非。
④ %ROWCOUNT
返回提取遊標記錄的行數
6、 過程與函數
過程procedure 也叫存儲過程,是由SQL語句和PL/SQL語句組合在一起為執行某一個任務的一個可執行單位。我們在使用時可以調用,過程沒有返回值。
函數function和過程的結構類似,也是有SQL語句和PL/SQL語句組合在一起,執行某一任務的一個可執行單位。過程和函數的差別在於,函數總返回單個值給調用者,而過程沒有值返回給調用者。
無參過程的創建
語法結構
Create or replace procedure 過程名 as
聲明語句段;
begin
執行語句段;
exception
異常處理語句段;
End;
帶參數過程的創建
①參數類型
在PL/SQL過程中,可以有3中類型的參數。
in 參數:讀入參數,主程序向過程傳遞參數值。
Out 參數:讀出參數,過程向主程序傳遞參數值。
in out參數:雙向參數,過程與主程序雙向交流數據。
②定義帶參數過程的語法
create or replace procedure 過程名(
參數1[in|out|in out]數據類型
[,參數2[in|out|in out] 數據類型]
……
[,參數n[in|out|in out] 數據類型]
)
(is|as)
聲明語句段;
Begin
執行語句段;
Exception
異常處理語句段;
End;
過程的執行
①利用begin..end執行
begin
過程名;
end;
③ 利用execute執行
execute 過程名
7、 觸發器
觸發器是一種特殊類型的存儲過程,由一些SQL語句組成,主要用於執行強制性的業務規則或要求,但不返回結果。當對數據庫的操作觸發了觸發器的條件時,系統將自動執行觸發器裏設置的SQL語句,完成某些特定的功能。當數據表被修改時,與其相關的觸發器隱式地被激發執行。對表的INSERT、UPDATE或DELETE操作都可以定義觸發器。
觸發器的結構
觸發事件或語句:引起觸發器被激發的SQL語句,是對指定表執行的INSERT、UPDATE或DELETE語句。
觸發器限制:一個布爾表達式,當觸發器激發時該條件必須為TRUE。觸發器的限制是用WHEN子句來指定。
觸發器的動作:一個PL/SQL塊(過程),由SQL語句和PL/SQL語句組成。當觸發語句發出,觸發器的限制計算為TRUE時,它被執行。在觸發器動作的語句中,可使用觸發器的處理的當前行的列值(包括新值和舊值),使用的形式為:NEW.列名(引用新值)或者OLD.列名(引用舊值)。
觸發器的分類
按照激活觸發的操作分類
激活觸發的操作是指對數據表實行什麽樣的操作時激活觸發器,分為3類:
INSERT觸發器:對數據表插入數據時執行觸發器動作。
UPDATE觸發器:對數據表更新數據時執行觸發器動作。
DELETE觸發器:對數據表刪除數據時執行觸發器動作。
觸發器的創建
可以使用CREATE TRIGGER來創建一個觸發器。與過程不同,每個觸發器都必須和某個特定的表相關,而且每一個觸發器都只和作用於該表上的一個或多個動作有關。
可以使用任何想用的名稱來命名觸發器,但是每個觸發器都必須由惟一的名稱。建議在觸發器的名稱內包含與觸發器相關聯的表和動作。
- 觸發器的創建
在企業管理器下面創建觸發器。
- 觸發器的修改
在企業管理器下面用鼠標右鍵點擊觸發器名稱選擇‘查看/編輯詳細資料
- 觸發器的刪除
在企業管理器下面用鼠標右鍵選擇移去
- 觸發器的啟用
ALTER TRIGGER “HR”.”TEMPTRIGGER”
ENABLE
如果要啟用數據表的所有觸發器,可以使用下面的SQL代碼。
ALTER TABLE “HR”.”EMPLOYEES”
ENABLE ALL TRIGGERS;
- 觸發器的停用
觸發器的停用可以執行下面的SQL語句來完成。
ALTER TRIGGER “HR”.”TEMPTRIGGER”
DISABLE
Oracle簡單總結