Oracle數據庫對象,同義詞、序列、視圖、索引
阿新 • • 發佈:2018-10-16
microsoft red 名稱 var 用戶角色 組合索引 img con pla 序列是用於生成唯一、連續序號的對象
CURRVAL 返回序列的當前值
數據庫對象簡介
Oracle 數據庫對象又稱模式對象
數據庫對象是邏輯結構的集合,最基本的數據庫對象是表
其他數據庫對象包括:
同義詞是現有對象的一個別名。
簡化SQL語句
隱藏對象的名稱和所有者
提供對對象的公共訪問
同義詞共有兩種類型:
CREATE USER test IDENTIFIED BY test; GRANT CONNECT , CREATE SYNONYM TO test; GRANT SELECT ON SCOTT.EMP TO test; GRANT DELETE ON SCOTT.EMP TOtest; GRANT UPDATE ON SCOTT.EMP TO test;
CREATE SYNONYM staff FOR SCOTT.emp;
CREATE PUBLIC SYNONYM pub_emp FOR SCOTT.emp;
CREATE OR REPLACE PUBLIC SYNONYM pub_emp FOR SCOTT.emp;
DROP SYNONYM staff; DROP PUBLIC SYNONYM pub_emp;
序列
序列是用於生成唯一、連續序號的對象
序列可以是升序的,也可以是降序的
使用CREATE SEQUENCE語句創建序列
依次為:
序列案例
create table t_testseq ( id number primary key, name varchar2(10) NOT NULL );
create sequence seq_value Start with 1 Increment by 1;
訪問序列
通過序列的偽列來訪問序列的值
NEXTVAL 返回序列的下一個值
CURRVAL 返回序列的當前值
INSERT INTO t_testseq VALUES (seq_value.NEXTVAL, ‘tom‘) INSERT INTO t_testseq VALUES (seq_value.NEXTVAL, ‘jime‘);
SELECT seq_value.CURRVAL FROM dual;
更改和刪除序列
ALTER SEQUENCE SEQ_VALUE MAXVALUE 5000 CYCLE;
DROP SEQUENCE SEQ_VALUE;
視圖
select dept.deptno,dname,loc,empno,ename,job,mgr,hiredate from emp,dept where emp.deptno = dept.deptno and dname= ‘ SALES ‘;
--查看當前用戶的系統權限 select * from user_sys_privs; --查看當前用戶角色權限 select * from user_role_privs; --查看某個角色權限 select * from role_sys_privs where role =‘RESOURCE’; --創建視圖 create view dept_emp as select dept.deptno,dname,loc,empno,ename,job,mgr,hiredate from emp,dept where emp.deptno = dept.deptno;
select * from dept_emp where dname= ‘ SALES ‘;
視圖以經過定制的方式顯示來自一個或多個表的數據
視圖可以視為“虛擬表”或“存儲的查詢”
創建視圖所依據的表稱為“基表”
視圖的優點有:
提供了另外一種級別的表安全性
隱藏的數據的復雜性
簡化的用戶的SQL命令
隔離基表結構的改變
通過重命名列,從另一個角度提供數據
create view dept_emp_order as select dept.deptno,dname,loc,empno,ename,job,mgr,hiredate from emp,dept where emp.deptno = dept.deptno order by dept.deptno;
create view dept_sal_avg as select dname,avg(sal) avg_sal from dept,emp where dept.deptno = emp.deptno group by dname;
視圖上的DML語句
在視圖上也可以使用修改數據的DML語句,如
INSERT、UPDATE和DELETE
視圖上的DML語句有如下限制:
只能修改一個底層的基表
如果修改違反了基表的約束條件,則無法更新視圖
如果視圖包含連接操作符、DISTINCT 關鍵字、集合操作符、聚合函數或 GROUP BY 子句,則將無法更新視圖
如果視圖包含偽列或表達式,則將無法更新視圖
update dept_emp set ename = ‘TOM‘ WHERE empno = 7521;
Select ename from dept_emp where empno = 7521
Select ename from emp where empno = 7521
CREATE OR REPLACE [FORCE] VIEW view_name [(alias[, alias]...)] AS select_statement [WITH CHECK OPTION] [WITH READ ONLY];
DROP VIEW view_name;
索引概念
索引是與表相關的一個可選結構
用以提高 SQL 語句執行的性能減少磁盤I/O
在邏輯上和物理上都獨立於表的數據
Oracle 自動維護索引
索引有各種類型,除了標準索引外,還有一些特殊類型的索引:
唯一索引
組合索引
反向鍵索引
位圖索引
管理索引
CREATE INDEX 索引名 ON 表名 (索引字段)
CREATE INDEX idx_ename ON emp (ename)
ALTER INDEX 索引名 REBUILD [REVERSE][NOREVERSE] ;
ALTER INDEX idx_ename REBUILD;
DROP INDEX 索引名;
DROP INDEX idx_ename;
測試索引
create table t_testseq ( id number, name varchar2(10) );
create sequence seq_value start with 1 increment by 1;
BEGIN FOR v_temp in 1..1000000 LOOP INSERT INTO t_testseq values(seq_value.nextval,’abcde’); END LOOP; END;
Set timing on; --sqlplus環境下設置
--常規查詢 Select * from t_testseq where id = 28900; --創建索引,再查詢 Create index idx_testseq_id on t_testseq(id);
Select * from t_testseq where id = 28900;
總結
同義詞是現有數據庫對象的別名
序列用於生成唯一、連續的序號
視圖是基於一個或多個表的虛擬表
索引是與表相關的一個可選結構,用於提高 SQL 語句執行的性能
索引類型有標準索引、唯一索引、反向鍵索引、位圖索引
Oracle數據庫對象,同義詞、序列、視圖、索引