文章目錄
Oracle資料庫的的重要部分就是資料字典。它是儲存在資料庫中的所有對象資訊的知識庫,Oracle資料庫管理系統使用資料字典擷取對象資訊和安全資訊,而使用者和DBA用它來查閱資料庫資訊。資料字典儲存資料對象和段的資訊,它是存放在System資料表空間的唯讀對象,不允許任何人對其修改。資料詞典中儲存的資料庫物件包括:使用者,角色,資料表空間,表,視圖,簇,類型,同義字,序列,索引,資料庫連接,預存程序,函數,包,觸發器等。Oracle將這些資料庫物件組合到一個稱為Schema的集合中。一個Schema只能被一個資料使用者所擁有,並且Schema的名稱與這個使用者的名稱相同。本文簡單介紹了表,序列,視圖等常用資料庫類型,其他的會在後續文章中介紹。
1、表
在Oracle中表的概念以及建立,刪除,修改表的文法與其他資料庫基本相同。但是Oracle資料庫表的資料類型與其他資料庫管理系統中的表資料類型有所不同。表1.1中列出了Oracle資料庫表中列的資料類型。
表1.1 Oracle資料庫表中列的資料類型
資料類型 |
描述 |
char |
儲存固定長度的肥Unicode字元資料,最大長度2000位元組 |
varchar2 |
儲存可變長度的字元資料,最大長度4000位元組 |
nchar |
儲存固定長度的Unicode字元資料,最大長度2000字元 |
nvarchar |
儲存可變長度的Unicode字元資料,最大長度4000字元 |
byte |
儲存1個個位元組的資料 |
long |
儲存可變長度的字元資料,最大長度2GB |
number decimal numberic |
三者等價。存數所類型的數字,包括固定和浮點,正數和負數,零。所有的數字類型本質上都是number類型,但是精度和小數位元不同,直接使用時,number取值範圍可以是10E38~10E126-1 |
integer,smallint |
二者等價,儲存範圍為-10E38~10E38的整數 |
float,real |
儲存範圍為-10E38~10E38的浮點精度數字資料 |
double precision |
儲存126位二進位精度的浮點精度數字資料 |
bfile |
儲存長度大於4GB外部二進位檔案的一個指標 |
BLOB |
儲存二進位大對象,最大長度4GB |
long raw |
儲存純位元據,最大長度2GB |
raw |
儲存純位元據,最大長度2000位元組 |
CLOB |
儲存單位元組字元資料,最大長度4GB支援固定和可變寬度的字元集 |
NCLOB |
是COLB的Unicode等價物 |
rowid |
儲存一個十六進位字串值,代表一行在表中的地址 |
urowid |
儲存一個十六進位字串值,代表一行在表中按照索引排序的邏輯地址 |
date |
儲存在公元前01/01/4712到公元後12/31/9999的日期和時間資料 |
timestamp |
用於代表一個日期的年,月,日,時分秒部分 |
interval year to month |
以年或者月儲存兩個日期之間的時間段 |
interval day to second |
以天,時間,分鐘,秒儲存兩個時間的間隔 |
2、視圖
視圖(VIEW)是從一個或多個表中通過查詢語句產生的一種虛表。可以認為視圖就是一個查詢語句的結果,只不過類似於表的形式儲存在資料庫中。視圖和他下層的基礎資料表不同,它是一個虛表,即視圖所對應的資料不實際儲存在資料庫中,資料庫中只存數視圖的定義。
使用視圖可以達到以下的目的:
- 將使用者的注意力集中到特定的資料上,以達到保護資料安全的目的。因為視圖可限制使用者從表中所檢索的內容,而不是表中儲存的所有資料。
- 簡化了資料的查詢和處理操作,資料庫開發人員可把相關的內容設計到一個視圖中,使使用者在查詢和處理資料是可以想處理表一樣簡單,而不是用編寫複雜的查詢語句,此外,通過使用比複雜資料庫中使用的名字更容易理解的名字,使用者可以看得更友好的資料顯示。
- 有利於資料交換操作。我們可以通過定義一個視圖,把需要交換的資料集中到一個視圖中,從而簡化資料交換操作。
- 有利於簡化對使用者權限的管理。資料庫擁有者可以授權讓其他的使用者可以通過視圖來查詢資料,而不是限制使用者查詢基礎資料表中特定列的許可權,這樣可以使得在更改基礎資料表設計時可以不影響使用者的查詢。
3、同義字
在開發資料庫應用程式時,應當普遍遵守的規則是盡量避免直接參考資料表、視圖或者其他資料庫物件。否則,到DBA對資料庫物件進行修改變變動後,比如改變表的名稱,表的結構等,就必須更新並重新編譯應用程式。Oracle使用了同義字(synonym)解決了這個問題。
同義字即資料庫物件的別名。在Oracle中可以建立兩種同義字:
- 公有同義字:由一個特殊的使用者組PUBLIC所擁有,資料庫表中的所有使用者都可以使用公有同義字。
- 私人同義字:有建立它的使用者或者Schema所擁有,使用者可以控制其他使用者是否有權使用屬於自己的私人同義字。
4、序列
序列(Sequence)是Oracle中的一直特殊對象,它可以給應用程式基底本連續並唯一的數值,序列用於實現資料庫表的主鍵列的自動成長。
建立序列的文法形式為:
create sequence 序列名 increment by 增量種子 start with 起始數字 maxvalue 最大值;
表DUAL是一個特殊的表,它只有一行一列,列的名稱是虛擬,資料類型為char(1)。當我們想快速擷取與特定的表無關,但是跟外部來源或者函數有關的資訊時,就要使用這個表。例如查詢序列的當前值,使用段dual表的另一個樣本是 select sysdate from dual 擷取目前時間,或者計算類似 select power (2.5) from dual 這樣的數學函數。