【Oracle】第三章索引檢視表序列,oracle第三章視圖
第三章索引檢視表序列
序列是用來產生唯一,連續的整數的資料庫物件。序列是用來自動產生主鍵或唯一鍵的值。
CREATE SEQUENCE sequence_name
START WITH integer
INCREMENT BY integer
MAXVALUE integer|nomaxvalue
MINVALUE integer|nominvalue
CYCLE|NOCYCLE
CACHE integer|nocache;
START WITH 指要產生的第一個序號,對於升序,其預設值為最小值。對於降序其預設值為最大值。
INCREMENT BY : 用於指定序號之間的間隔。其預設值為1。 如果為正值,則產生的序列按升序排列,如果為負值,則產生的序列按降序排列
MAXVALUE :指定序列可產生的最大值
NOMAXVALUE :如果指定了NOMAXVALUE,Oracle將升序序列的最大值設定為10的27次方,將降序序列的的最大值設為-1.
MINVALUE : 指定序列的最小值。MINVALUE必須小於或等於START WITH 的值,並且必須小於MAXVALUE。
NOMINVALUE :如果指定了NOMINVALUE ,Oracle將升序序列的最小值設定為1,或者將降序的最小值設定為-10 的26次方。
CYCLE :指定序列在達到最大值或最小值後,將繼續從頭開始產生值
NOCYCLE :指定序列在達到最大或者最小值的時候,將不能繼續產生值
CACHE :使用CACHE選項可以預先分配一組序號,並將其儲存在記憶體中,這樣可以更快的訪問序號,當用完緩衝中的所有序號時,Oracle 將產生另外一組數值,並將其保留在記憶體中
NOCACHE :使用NOCACHE選項,則不會加快訪問速度而預先分配序號,如果在建立序列時忽略了CACHE和NOCACHE選項,Oracle 將預設緩衝20個序號。
以下代碼建立了一個名為:emp_id的序列(序號從10開始,自動成長為1,最大值為2000)
Create sequence mytable_id start with 10 increment by 1 maxvalue 2000
以下代碼把 emp_id 序列產生的值插入到mytable表中
insert into mytable values(mytableid.nextval,'rose','beijing','rose@sdi.com',date'2007-10-10');
以下代碼修改了mytable_id 序列的資訊。重新設定了新的 maxvalue 值以及設定增量值為2
Alter sequence mytable_id increment by 2 maxvalue 5000;
********* 注意 :不能修改序列的 start with 參數。
以下代碼示範了刪除一個序列
Drop sequence emp_id;
可以通過查詢user_sequence 字典表來擷取有關序列的資訊。
user_sequence 表中的部分列
Sequence_name |
序列名 |
Min_value |
最小值 |
Max_value |
最大值 |
Increment_by |
序列的增量 |
Cycle_flag |
該序列是否迴圈,該值為Y或N |
Order_flag |
該序列是否有序,該值為Y或N |
Cache_size |
儲存在記憶體中的序列值的個數 |
Last_number |
該序列產生或緩衝的最後一個數字 |
以下查詢顯示了user_sequence表中的詳細資料
select * from user_sequences
刪除序列:
drop sequence mytable_id;
建立視圖:
視圖是在一個或者多個表上的預定義查詢。
以下代碼 在order_master 表中建立order_view 視圖
create or replace view order_view as select * from order_master where vencode='V001'
在視圖中使用 with check option 。修改視圖後在視圖中不能顯示修改的行。使用with check option 可以防止視圖資料被修改。
-- 在order_master 表中建立order_view 視圖 ,並且加了with check option 約束,
--如果修改 視圖中 vencode 列的值將違反 with check option 約束。
create or replace view order_view as select * from order_master where vencode='V001' with check option
--由於視圖中增加了with check option 約束
update order_view set vencode='V002' where orderno='o003'
--建立唯讀視圖
create or replace view order_viewOnly as select * from order_master where vencode='V001' with read only
select * from order_viewonly
--試圖修改以上唯讀視圖
update order_viewonly set ostatus='C' where orderno='V001'
建立帶有錯誤視圖:
下面語句建立一個基於表venmast 的視圖 ,但是在資料庫中並不存在名為“venmast”的表:
Create force view vtable as select * from viewtable;
使用索引
唯一索引:
唯一索引確保在定義索引的列中沒有重複值
Oracle 自動在表的主鍵列上建立唯一索引
使用CREATE UNIQUE INDEX語句建立唯一索引
以下代碼在jobs表的name列上建立了一個名為jobnameindex 的唯一索引:
create unique index jobnameindex on jobs(name);
alter index 語句的 rebuild 選項可以用來重建現有的索引,該語句效率高於使用drop index 和 create index 語句重新建立索引,下列語句示範如何重建jobnameindex索引:
alter index jobnameindex rebuild ;
複合式索引:
複合式索引是在表的多個列上建立的索引
索引中列的順序是任意的
如果 SQL 語句的 WHERE 子句中引用了複合式索引的所有列或大多數列,則可以提高檢索速度
以下代碼在employee2 表中建立了複合式索引:
create index comp_index on employees2(first_name,last_name);
反向鍵索引:
反向鍵索引反轉索引列鍵值的每個位元組
通常建立在值是連續增長的列上,使資料均勻地分布在整個索引上
建立索引時使用REVERSE關鍵字
以下代碼示範了建立反向鍵索引
create index rev_inx on employees2(salary) reverse
使用noreverse關鍵字將反向鍵索引重建為標準索引:
alter index rev_inx rebuild noreverse;
位元影像索引:
位元影像索引適合建立在低基數列上
位元影像索引不直接儲存ROWID,而是儲存位元組位到ROWID的映射
減少回應時間
節省空間的佔用
以下代碼示範了如何建立位元影像索引:
create bitmap index bit_inx on employees2(division_id);
基於函數的索引
基於一個或多個列上的函數或運算式建立的索引
運算式中不能出現彙總函式
不能在LOB類型的列上建立
建立時必須具有 QUERY REWRITE 許可權
以下代碼示範了如何建立一個基於函數的索引
create index lowercase_inx on employees2(lower(job_id));
修改索引,以下代碼重新命名了索引。
Alter index vn_ind rename to c_vn_ind;
刪除索引:
Drop index cvn_ind;
查看已建立的索引資訊
select * from user_indexes
查看索引基於的列
select * from user_ind_columns