Table

Table在Oracle資料庫中最基本及必要的資料儲存物件(Object),Table既然是資料儲存物件(Object)就必定需要空間來存放資料,而Table是屬於資料區段(Data Segment)的一種類型。Table重點如下:
  • Table是以資料列(Row)與資料行(Column)架構出來的儲存模式,那資料列(Row)與資料行(Column)是如何架構Table的儲存模式呢?在資料庫裡的每一筆資料都稱為一筆資料列(Row),而每一筆資料列(Row)都是由一個或是多個事先設定資料型態的資料行(Column)進行儲存,如圖所示。


  • Table是以資料列(Row)為單位儲存於Table中,Oracle會將儘量將同一筆資料列(Row)放在同一個Table中。
  • 可設定Table參數,控制使用資料Table運用狀況
  • 在建置Table時可以指定此Table的資料存放在哪個Tablespace。
資料列
資料表(Table)裡面的資料是以資料列(Row)型態為單位儲存在資料庫的Table裡面。資料列(Row)的重點如下:
  • 資料列(Row)是儲存在Table裡面的一個變動長度的記錄,所以每一筆資料列(Row)在Table裡面所佔有的儲存空間並不盡相同。
  • 一個Table裡面可能會存放多筆資料列(Row)。
  • 通常一筆資料列(Row)的資料Oracle會盡量放在同一個Table裡面,如果資料列(Row)的資料的內容超過一個Table的大小時,則那筆資料列(Row)就必須跨越數個Table,如此就會產生所謂的資料串鏈(Row Chaining)。
  • 當一筆資料列(Row)的資料被修改後使得資料的內容超過一個Table的大小時,Oracle為了將資料能夠儲存於一個Table會將此筆資料列(Row)移到另一個Table儲存,如此就會產生所謂的資料遷徒(Row Migration)。
  • 每一筆資料列(Row)包含不同的資料行(Column)
  • 一筆資料列(Row)是由兩個部份組成Row Header與Row Data。
    • Row Header:裡面是紀錄總共有多少資料行(Column)、資料列鎖定(Row Lock)與鎖鏈(Chaining)的相關資訊。
    • Row data: 裡面除了是放資料的地方同時也紀錄著資料行(Column)的長度。
資料行
資料表(Table)利用資料行(Row)的資料型態(Data Type)設定來規範每個欄位資料的儲存限制與種類,而Oracle內建的資料型態可分為4大類,字元資料型態,大型物件資料型態、數值資料型態、日期資料型態與其他資料型態。Oracle資料型態如細表所示:

資料型態類別資料型態名稱說 明
字元資料型態
CHARCHAR資料型態屬於固定長度資料型態,可設定字元範圍是1至2000個字元,預設值是1個字元。如果輸入的值小於CHAR2資料型態所設定的長度,Oracle會自動補上空白。
VARCHAR2VARCHAR2資料型態屬於變動長度資料型態,在設定VARCHAR2時需要指定一個最大長度的值。VARCHAR2資料型態最多可以到達4000個字元。與CHAR資料型態最大的不同處是在於,當數入的值小於設定長度時,Oracle並不會自動補上空白,而是以輸入值的長度儲存。
NCHARNCHAR資料型態屬於固定長度資料型態,同時資料型態是依照資料庫使用二字元集(National Language Set;NLS)儲存資料。
NVARCHAR2NVARCHAR2資料型態屬於變動長度資料型態,同時資料型態是依照資料庫使用第二字元集(National Language Set;NLS)儲存資料。
大型物件資料型態
LONGLONG資料型態屬於變動長度資料型態,主要是儲存大型文字資料的資料型態,最大可以到2G。這是Oracle舊版儲存大型資料的型態,現在Oracle建議使用CLOB,同時在表格裡面使用LONG資料型態會有多種限制例如:
1. 一個表格裡面只能有一個LONG資料型態的欄位。
2. LONG資料型態的欄位不能使用,WHERE、GROUP BY、ORDER BY語法。
3. LONG資料型態的欄位上不能建索引。
CLOB主要是儲存大型文字資料的資料型態,最大可以到4G。通常再存資料時Oracle會以VARCHAR2為準,但只要儲存資料大於VARCHAR2的標準,就必須要要存成CLOB,
NCLOB主要是儲存大型文字資料的資料型態,最大可以到4G,同時資料型態是依照資料庫使用第二字元集(National Language Set;NLS)儲存資料。
BLOB儲存大型二進位的資料通常是圖檔資料,最大可以到4G。
BFILEBFILE資料型態只要是儲存指標,而這個指標指向Oracle資料庫外的檔案。
數值資料型態NUMBERNUMBER資料型態是Oracle資料庫中唯一的數值資料型態,NUMBER資料型態可幾加上兩個條件例如:NUMBER(precision, scale)precision是代表精準位數,scale是代表小數點位數。
日期資料型態DATEDATE資料型態是日期資料型態。
其他資料型態
ROW儲存二進位(Binary)資料,最大可以到2K。
LONG ROW儲存二進位(Binary)資料,最大可以到2G。
ROWIDROWID為該標示出此資料列(Row)在資料庫裡唯一的位址。ROWID是一個偽列虛擬的欄位,可以用在SELECT的語法查詢,但不可以用INSERT, UPDATE來修改。
UROWIID主要是用在索引組織表格(Index-Organized Table)上。

ROWID

  • ROWID代表每一筆資料列(ROW)獨特的位置,而ROWID是一個虛擬的欄位,址能在SQL語法中被使用者存取。有關ROWID的重點如下:
  • 每一筆資料列(ROW)都有自己獨特的ROWID,只要這筆資料列(ROW)沒有被刪除掉這ROWID都會存在。
  • ROWID的重點是讓使用者很容易找到所需要的資料。
  • ROWID是一個虛擬的欄位,也就是說ROWID是Oracle 資料庫自動產生出來的,當執行select一個Table時自動產生出來的,ROWID並沒有實際存放在資料庫裡面。
  • ROWID是只提供查詢使用無法使用新增(Insert),修改(Update)和刪除(Delete),更動ROWID。
  • ROWID 對每一筆資料列(ROW)來說都是獨一無二的,也就是說是獨一無二的識別碼。
  • ROWID不是存在特定的Table裡面,而是動態產生的。
  • ROWID並不是實際告訴使用者所需的那筆資料實際存在硬碟上那邊,而是告訴使用者如何找到這筆資料是在磁碟上的哪個位置。
  • ROWID提供使用者最快速的查詢速度,索引(Index)後面跟著是ROWID,因此如果跳過索引(Index)直接查詢ROWID最快。
  • ROWID是儲存在索引(Index)裡面。查詢ROWID的方式語法及範例如下:
SELECT COLUMN_1,ROWID FROM TEST_USER.TEST;
查詢結果如如圖



  • ROWID的格式如下
    • ROWID是由10個Bytes存放的資訊,但顯示是由18個字元來表示。
    • ROWID的格式是由4個部份組合而成。如圖。
    • Data Object Number:指出是屬於哪一個物件的,當物件被建製出來時就產生出來了,同時也具有唯一性。
    • Relative File Number:這裡指的file number是相對的file number,不是絕對的file number。Oracle的絕對file number第0號是system tablespace的第一個資料檔(Data File),在Relative File Number指的是某一個tablespace裡面的第一個資料檔(Data File),而不是整個資料庫的第一個資料檔(Data File),因此是由Object ID知道是哪個Segment。所以找的方式是:由ROW Directory找到資料。如圖

  • Block Number:顯示此Table裡面包含了哪些資料列(Row)。
  • Row Number:顯示此筆資料在Table中所在的位置。

沒有留言:

張貼留言