Oracle基礎筆記十一

第十一章 其他數據庫對象


1.什麼是序列?

序列:提供有規律的數值。

序列: 可供多個用戶用來產生唯一數值的數據庫對象

自動提供唯一的數值

共享對象

主要用於提供主鍵值

將序列值裝入內存可以提高訪問效率


1.2.定義序列

CREATE SEQUENCE 語句

CREATE SEQUENCE sequence

       [INCREMENT BY n]  --每次增長的數值

       [START WITH n]    --從哪個值開始

       [{MAXVALUE n | NOMAXVALUE}]

       [{MINVALUE n | NOMINVALUE}]

       [{CYCLE | NOCYCLE}]     --是否需要循環

       [{CACHE n | NOCACHE}];  --是否緩存登錄


1.3.創建序列

創建序列 DEPT_DEPTID_SEQ爲表 DEPARTMENTS 提供主鍵,不使用 CYCLE 選項

CREATE SEQUENCE dept_deptid_seq

                INCREMENT BY 10

                START WITH 120

                MAXVALUE 9999

                NOCACHE

                NOCYCLE;


例子:

Create sequence seq;

Select seq.nextval from dual;

Insert into emp values(seq.nextval,’c’);


其中create table emp as select employee_id,last_name name from employees where 1=2;


查詢序列

SELECT sequence_name, min_value, max_value, 

increment_by, last_number

FROM user_sequences;


查詢數據字典視圖 USER_SEQUENCES 獲取序列定義信息,如果指定NOCACHE 選項,則列LAST_NUMBER 顯示序列中下一個有效的值


1.4NEXTVAL 和 CURRVAL 僞列

NEXTVAL 返回序列中下一個有效的值,任何用戶都可以引用

CURRVAL 中存放序列的當前值 

NEXTVAL 應在 CURRVAL 之前指定 ,否則會報CURRVAL 尚未在此會話中定義的錯誤。


1.5序列應用舉例

INSERT INTO departments(department_id, 

            department_name, location_id)

VALUES      (dept_deptid_seq.NEXTVAL, 

            'Support', 2500);


1.6使用序列

將序列值裝入內存可提高訪問效率

序列在下列情況下出現裂縫:回滾,系統異常,多個表同時使用同一序列

如果不將序列的值裝入內存(NOCACHE), 可使用表 USER_SEQUENCES 查看序列當前的有效值


1.7修改序列

修改序列的增量, 最大值, 最小值, 循環選項, 或是否裝入內存

ALTER SEQUENCE dept_deptid_seq

               INCREMENT BY 20

               MAXVALUE 999999

               NOCACHE

               NOCYCLE;


修改序列的注意事項

必須是序列的擁有者或對序列有 ALTER 權限

只有將來的序列值會被改變

改變序列的初始值只能通過刪除序列之後重建序列的方法實現


1.8刪除序列

使用 DROP SEQUENCE 語句刪除序列

刪除之後,序列不能再次被引用

DROP SEQUENCE dept_deptid_seq;

Sequence dropped.


2.索引:提高查詢的效率

索引:

一種獨立於表的模式對象, 可以存儲在與表不同的磁盤或表空間中

索引被刪除或損壞, 不會對錶產生影響, 其影響的只是查詢的速度

索引一旦建立, Oracle 管理系統會對其進行自動維護, 而且由 Oracle 管理系統決定何時使用索引。用戶不用在查詢語句中指定使用哪個索引

在刪除一個表時,所有基於該表的索引會自動被刪除

通過指針加速 Oracle 服務器的查詢速度

通過快速定位數據的方法,減少磁盤 I/O


2.1創建索引

自動創建: 在定義 PRIMARY KEY 或 UNIQUE 約束後系統自動在相應的列上創建唯一性索引

手動創建: 用戶可以在其它列上創建非唯一的索引,以加速查詢

在一個或多個列上創建索引:

CREATE INDEX index

ON table (column[, column]...);

在表 EMPLOYEES的列 LAST_NAME 上創建索引:

CREATE INDEX emp_last_name_idx

ON employees(last_name);

Index created.


2.2什麼時候創建索引

以下情況可以創建索引:

列中數據值分佈範圍很廣

列經常在 WHERE 子句或連接條件中出現

表經常被訪問而且數據量很大 ,訪問的數據大概佔數據總量的2%到4%


什麼時候不要創建索引

下列情況不要創建索引:

表很小

列不經常作爲連接條件或出現在WHERE子句中

查詢的數據大於2%到4%

表經常更新


查詢索引:可以使用數據字典視圖 USER_INDEXES 和 USER_IND_COLUMNS 查看索引的信息

刪除索引:使用DROP INDEX 命令刪除索引

只有索引的擁有者或擁有DROP ANY INDEX 權限的用戶纔可以刪除索引

刪除操作是不可回滾的


3.同義詞synonym:給對象起別名

使用同義詞訪問相同的對象:

方便訪問其它用戶的對象

縮短對象名字的長度


例如:

1.CREATE SYNONYM e FOR employees;

select * from e;


2.CREATE SYNONYM  d_sum

FOR  dept_sum_vu;

Synonym Created.


DROP SYNONYM d_sum;

Synonym dropped.




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章