程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 【Oracle】第三章索引視圖序列

【Oracle】第三章索引視圖序列

編輯: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','[email protected]',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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved