Oracle數據庫對象,同義詞、序列、視圖、索引

數據庫對象簡介sql

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 TO test;
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; 

序列數據庫

序列是用於生成惟1、連續序號的對象

序列能夠是升序的,也能夠是降序的

使用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;

 視圖spa

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 自動維護索引

索引有各類類型,除了標準索引外,還有一些特殊類型的索引:

  惟一索引

  組合索引

  反向鍵索引

  位圖索引

 管理索引3d

 

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; 

測試索引code

 

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;

 

總結對象

  同義詞是現有數據庫對象的別名

  序列用於生成惟1、連續的序號

  視圖是基於一個或多個表的虛擬表

  索引是與表相關的一個可選結構,用於提升 SQL 語句執行的性能

  索引類型有標準索引、惟一索引、反向鍵索引、位圖索引

相關文章
相關標籤/搜索