第十一章 其他數據庫對象
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.