1. 程式人生 > >Oracle數據庫對象,同義詞、序列、視圖、索引

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

microsoft red 名稱 var 用戶角色 組合索引 img con pla

數據庫對象簡介

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; 

技術分享圖片

序列

序列是用於生成唯一、連續序號的對象

序列可以是升序的,也可以是降序的

使用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數據庫對象,同義詞、序列、視圖、索引