<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1.同義詞管理
1.1同義詞: 是指爲表,視圖和序列等對象起的另一個名字。
1.2同義詞分爲兩種: 私有同義詞和公有同義詞。(語法上的區別在於公有同義詞在創建時需加上public關鍵字,更加本質的區別在於使用範圍的不同,公有同義詞範圍大。)
1.3語法規則:
create [public]synonym<synonym_name>for<object_name>;
1.4舉例說明:
爲表emp創建同義詞
create synonym employee for emp;
下面兩條select語句是等效的
(1) select * from emp;
(2) select * from employee;
假設表emp1不存在,同樣可以創建同義詞。但必須在創建了表emp1後,所創建的同義詞纔可以使用,否則會有錯“ORA-00980: 同義詞轉換不再有效”。
如圖:
<?xml:namespace prefix = v />
1.5刪除同義詞
drop synonym<synonym_name>(私有同義詞)
drop public synonym<synonym_name>(公有同義詞)
2.序列管理
2.1 Oracle序列是一個連續的數字生成器。序列常用於關鍵字,或給數據行排序。序列號可以被設置爲上升或者下降,可以沒有限制或重複使用直到一個限制值。
2.2 語法規則:
create sequence<sequence_name>keyword
表2-1 create sequence個選項的含義
keyword |
描述 |
start with |
定義序列生成的第一個數字,默認爲1 |
increment by |
定義序列號是上升還是下降,對於一個降序列increment by爲負值 |
minvalue |
定義序列可以生成的最小值,這是降序序列中的限制值 |
no minvalue |
沒有最小值限制 |
maxvalue |
序列能生成的最大數字。這是升序序列中的限制值 |
no maxvalue |
沒有最大限制值 |
cycle |
設置序列值在達到限制值以後可以重複 |
nocycle |
設置序列值在達到限制值以後不能重複,這是默認設置。當試圖產生maxvalue+1的值時,將會產生一個異常。 |
cache |
預先產生的序列個數,默認爲20個 |
nocache |
在每次序列號產生時強制數據字典更新,保證在序列值之間沒有間隔 |
2.3舉例說明:
爲表cm創建序列
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
在創建過程中需注意:cache默認爲20,也就是說Oracle可以預先在內存裏面放置一些sequence,數量爲20個。但是初始值100到最大值130,自動增長值爲10,那也就是隻有100,110,120,130四個,小於cache的20個,所以會出現圖中錯誤.
建立的序列後,就可以使用屬性nextval取得序列的下一個值。第一次nextval返回的是初始值,隨後nextval會自動增加定義的increment by 值,然後返回增加後的值。屬性currval總是返回當前sequence的值,但是,在第一次nextval初始化之後才能使用currval,否則會出錯。
2.4修改序列
alter sequence cm _seq nocache;
2.5刪除序列
drop sequence cm_seq;
3.視圖管理
3.1 視圖是一個或多個表或視圖中導出的表,其結構和數據是建立在對錶的查詢的基礎上的。
3.2 語法規則:
create[or replace] [force|noforce] view<view_name>
as select語句
[with check option constraint[constraint_name]]
[with read only]
3.3創建帶錯誤的視圖(注意加上force選項)
3.4 with check option 和with read only選項
(1) with check option 子句的作用是在視圖中不允許使用insert或者update命令來對選擇的視圖中的行進行插入和修改的操作。
如圖說明:
(2) with read only 可以完全禁止通過視圖來修改表格資料,只需在create view句子加入with read only。
如圖說明:
3.5 刪除視圖
Drop view <view_name>
例如:drop view emp_v;
3.6 視圖上的DML語句
q 在視圖上也可以使用修改數據的DML語句,如INSERT、UPDATE和DELETE
q 視圖上的DML語句有如下限制:
q 只能修改一個底層的基表
q 如果修改違反了基表的約束條件,則無法更新視圖
q 如果視圖包含連接操作符、DISTINCT 關鍵字、集合操作符、聚合函數或 GROUP BY 子句,則將無法更新視圖
q 如果視圖包含僞列或表達式,則將無法更新視圖
3.7 通過視圖修改數據時需注意: 只有鍵保留表的列才能被修改。
什麼是鍵保留表呢??
-----在創建視圖時如果涉及到了主從表關係,並且如果一個表中的主鍵同時也當作視圖中的主鍵。那麼這個表就上鍵保留表。
4.索引管理
4.1創建索引時需注意的幾個條件:
(1)表中重複數據不多(基數高)
(2)要是經常查詢的表
(3)數據量多
(4)建索引的列是where子句/group by/order by/的條件列
(5)主鍵(唯一索引)
(6)不頻繁進行行的增,刪,改。
4.2語法規則:
可以基於數據庫表中的單列或多列創建索引,語法如下:
create [unique] index <index_name> on<table_name>(col_name1,…….);
創建唯一索引只需在create與index間加上關鍵字unique
4.3
刪除索引
drop index <index_name>
例如: drop index emp_ename_index;
4.4跟索引有關的數據字典:
(1) user_indexes :用戶創建的索引信息
(2) user_ind_partitions:用戶創建的分區索引的信息
(3) user_ind_columns:索引相關的列的信息
4.5創建各種類別的索引:
(1)創建標準索引:CREATE INDEX item_index ON itemfile (itemcode)
TABLESPACE index_tbs;
(2)重建索引:ALTER INDEX item_index REBUILD;
(4) 唯一索引:CREATE UNIQUE INDEX item_index ON itemfile (itemcode);
(5)反向鍵索引:
SQL> CREATE INDEX rev_index ON itemfile (itemcode) REVERSE;
SQL> ALTER INDEX rev_index REBUID NOREVERSE;
(6)位圖索引:SQL> CREATE BITMAP INDEX bit_index
ON order_master (orderno);
(7)索引組織表:SQL> CREATE TABLE ind_org_tab (
vencode NUMBER(4) PRIMARY KEY,
venname VARCHAR2(20)
)
ORGANIZATION INDEX;
(8)基於函數的索引:SQL> CREATE INDEX lowercase_idx
ON toys (LOWER(toyname));
SQL> SELECT toyid FROM toys
WHERE LOWER(toyname)='doll';
(9)組合索引:SQL> CREATE INDEX comp_index ON itemfile(p_category, itemrate);