數(shù)據(jù)庫(kù)對(duì)象簡(jiǎn)介
Oracle 數(shù)據(jù)庫(kù)對(duì)象又稱模式對(duì)象。
數(shù)據(jù)庫(kù)對(duì)象是邏輯結(jié)構(gòu)的集合沛婴,最基本的數(shù)據(jù)庫(kù)對(duì)象是表吼畏。
序列
序列是用于生成唯一、連續(xù)序號(hào)的對(duì)象嘁灯。
序列可以是升序的泻蚊,也可以是降序的。
序列創(chuàng)建
SQL> CREATE SEQUENCE toys_seq
? ? ? ? ? ?START WITH 10 -- 指定起始值
? ? ? ? ? ?INCREMENT BY 10
? ? ? ? ? ?MAXVALUE 2000
? ? ? ? ? ?MINVALUE 10
? ? ? ? ? ?NOCYCLE
? ? ? ? ? ?CACHE 10; -- 內(nèi)存中預(yù)先分配的序號(hào)數(shù)
SQL> CREATE SEQUENCE seqa START WITH 1000 INCREMENT BY 2;
序列操作
通過序列的偽列來訪問序列的值
NEXTVAL 返回序列的下一個(gè)值
CURRVAL 返回序列的當(dāng)前值
SQL> SELECT seqa.CURRVAL FROM dual;
更改序列
注意:不能修改序列的start with 數(shù)值
SQL> ALTER SEQUENCE seqa MAXVALUE 5000 CYCLE;
刪除序列
SQL> DROP SEQUENCE seqa;
同義詞
同義詞是現(xiàn)有對(duì)象的一個(gè)別名
簡(jiǎn)化SQL語(yǔ)句
隱藏對(duì)象的名稱和所有者丑婿,開發(fā)者可以不考慮具體對(duì)象名
提供對(duì)對(duì)象的公共訪問性雄,提高安全性
同義詞共有兩種類型:
公有同義詞可被所有的數(shù)據(jù)庫(kù)用戶訪問。
私有同義詞只能在其模式內(nèi)訪問羹奉,且不能與當(dāng)前模式的對(duì)象同名秒旋。
同義詞操作
創(chuàng)建同義詞
只有DBA用戶才能建立同義詞
SQL> CREATE SYNONYM myemp FOR scott.emp;
SQL> CREATE PUBLIC SYNONYM myemp2 FOR scott.emp;
訪問同義詞
私有同義詞無論授權(quán)與否一般(除DBA之外)只能當(dāng)前用戶模式訪問
公共同義詞只有得到同義詞所對(duì)應(yīng)對(duì)象的select授權(quán)才能訪問
SQL> GRANT SELECT ON myemp(同義詞) TO xm(用戶名);
SQL> SELECT * FROM myemp;
修改同義詞
SQL> CREATE OR REPLACE SYNONYM myemp FOR SCOTT.dept;
刪除同義詞
SQL> DROP SYNONYM myemp;
SQL> DROP PUBLIC SYNONYM myemp2;
視圖
視圖以經(jīng)過定制的方式顯示來自一個(gè)或多個(gè)表的數(shù)據(jù),可以視為“虛擬表”或“存儲(chǔ)的查詢”
視圖本身不存儲(chǔ)數(shù)據(jù)
創(chuàng)建視圖所依據(jù)的表稱為“基表”
視圖的優(yōu)點(diǎn)有:
提供了另外一種級(jí)別的表安全性
隱藏?cái)?shù)據(jù)的復(fù)雜性
簡(jiǎn)化用戶查詢SQL
隔離基表結(jié)構(gòu)的改變
通過重命名列,從另一個(gè)角度提供數(shù)據(jù)
創(chuàng)建視圖
創(chuàng)建視圖的語(yǔ)法:
CREATE? [OR REPLACE] [FORCE]? VIEW
? ? ? ? view_name [(alias[, alias]...)]
? ? ? ? ?AS select_statement
? ? ? ? [WITH CHECK OPTION]--檢查視圖
? ? ? ? [WITH READ ONLY];--只讀視圖
CREATE VIEW v_emp AS
? ? ? ? SELECT empno,ename,job FROM emp
? ? ? ? WHERE deptno=10
? ? ? ? [WITH CHECK OPTION CONSTRAINT chk_pv]
? ? ? ? [with read only];
刪除視圖:drop view
創(chuàng)建簡(jiǎn)單的視圖
CREATE VIEW myview AS
SELECT * FROM emp WHERE job='MANAGER';
創(chuàng)建帶有聚合函數(shù)的視圖
CREATE VIEW myviewa AS SELECT deptno,sum(sal) totsal FROM emp GROUP BY deptno;
創(chuàng)建從多張表連接形成的視圖
CREATE VIEW myviewb AS SELECT ename,job,dname,loc FROM? emp e,dept d WHERE e.deptno=d.deptno;
注意:
--創(chuàng)建視圖權(quán)限
grant create? view to scott;
--授予查詢權(quán)限
grant select any table to scott;
--授予權(quán)限
grant select any dictionary to scott;
視圖上的DML語(yǔ)句
在視圖上也可以使用修改數(shù)據(jù)的DML語(yǔ)句诀拭,如INSERT迁筛、UPDATE和DELETE
視圖上的DML語(yǔ)句有如下限制:
只能修改一個(gè)底層的基表
如果修改違反了基表的約束條件,則無法更新視圖
如果視圖包含連接操作符炫加、DISTINCT 關(guān)鍵字瑰煎、集合操作符铺然、聚合函數(shù)或 GROUP BY 子句俗孝,則將無法更新視圖
如果視圖包含偽列或表達(dá)式酒甸,則將無法更新視圖
視圖更改
UPDATE myview SET sal=sal+20;--成功
UPDATE myviewa SET totsal=10000 WHERE? deptno=10;聚合函數(shù)
UPDATE myviewb SET job=‘MANAGER’ WHERE ename=‘SMITH’;
SQL> INSERT INTO myview(empno,ename,job,deptno) VALUES(2222,'rose','CLERK',10);
SQL>SELECT * FROM myview;
SQL>--為什么插入數(shù)據(jù)看不到?--實(shí)際已添加至基表,但被職位限制不顯示了
SQL> DROP VIEW myview
SQL>CREATE VIEW myview AS SELECT * FROM emp WHERE job=‘MANAGER’ with check option;--再次添加會(huì)報(bào)錯(cuò)赋铝,因?yàn)橐严拗浦荒芴砑?manager'
索引
索引是與表相關(guān)的一個(gè)可選結(jié)構(gòu)
用以提高 SQL 語(yǔ)句執(zhí)行的性能
減少磁盤I/O
使用 CREATE INDEX 語(yǔ)句創(chuàng)建索引
在邏輯上和物理上都獨(dú)立于表的數(shù)據(jù)
Oracle 自動(dòng)維護(hù)索引
索引有各種類型插勤,除了標(biāo)準(zhǔn)索引外,還有一些特殊類型的索引:
索引管理
索引創(chuàng)建
通過主鍵革骨、唯一約束等自動(dòng)建立
手動(dòng)創(chuàng)建
CREATE INDEX index_emp ON emp(hiredate)
SELECT* FROM emp WHERE hiredate>to_date(‘19810101’,’yyyymmdd’)
重建索引
ALTER INDEX index_emp REBUILD;
刪除索引
DROP INDEX index_emp ;
索引一覽
唯一索引
Oracle 自動(dòng)在表的主鍵列上創(chuàng)建唯一索引
CREATE UNIQUE INDEX
組合索引
是在表的多個(gè)列上創(chuàng)建的索引
反向鍵索引
通常建立在值是連續(xù)增長(zhǎng)的列上农尖,使數(shù)據(jù)均勻地分布在整個(gè)索引上
創(chuàng)建索引時(shí)使用REVERSE關(guān)鍵字,基于B樹優(yōu)化
位圖索引
通常建立低基數(shù)列上良哲,列值相對(duì)固定
CREATE BITMAP INDEX
本章小結(jié)
同義詞是現(xiàn)有數(shù)據(jù)庫(kù)對(duì)象的別名
序列用于生成唯一盛卡、連續(xù)的序號(hào)
視圖是基于一個(gè)或多個(gè)表的虛擬表
索引是與表相關(guān)的一個(gè)可選結(jié)構(gòu),用于提高 SQL 語(yǔ)句執(zhí)行的性能筑凫。索引類型有標(biāo)準(zhǔn)索引滑沧、唯一索引、反向鍵索引巍实、位圖索引和基于函數(shù)的索引