Oracle數據庫——索引、視圖、序列和同義詞的創建


一、涉及內容

  1.理解索引的概念和類型。

  2.掌握創建索引的命令。

  3.理解視圖的概念和優點。

  4.理解可更新視圖應具備的特點。

  5.掌握創建一般視圖和可更新視圖的命令。

  6.理解序列和同義詞的概念和作用。

  7.掌握序列的創建與應用。

  8.掌握同義詞的創建與應用。

二、具體操作

( 實驗)

  1.在數據庫中創建Student表,包括學號Id、姓名Name、性別Sex、班級編號Class_id。利用該表創建如下索引:

 (1)在Id字段上創建唯一的B樹索引。

 (2)在Name字段上創建普通的B樹索引。

 (3)在Sex 字段上創建位圖索引。

語句:

--建表:
create table Student
 (Id char(6),
  Name varchar2(8),
  Sex char(2),
  Class_id char(4));

create unique index index_id on Student(Id);

create  index index_name on Student(Name);

create bitmap index index_sex on  Student(Sex);

截圖:

 

  2.利用scott.emp 表創建視圖並完成以下操作:

 (1)創建簡單視圖。

   語句:

conn scott/tiger;

grant insert,update,delete on emp to system;

conn system/orcl1234;

create or replace VIEW v_emp
as 
select empno,ename,job,hiredate,deptno 
from scott.emp;

  截圖:

 

 (2)查看視圖的結構。

  語句:SQL> desc v_emp;

   截圖:

 

 (3)從視圖中查詢數據。

  語句:SQL>  select * from v_emp where deptno=10;

  截圖:

 

 (4)查看視圖中各字段的可更新性。

  語句:select * from USER_UPDATABLE_COLUMNS  where table_name='V_EMP';

  截圖:

 

 

 (5)向視圖中增加新數據。

  語句:insert into v_emp values(1234,'JACK','CLERK','29-4月-1963',10);

  截圖:

 

 (6)利用視圖修改數據。

  語句:update v_emp set ename='Mark' where empno=1234;

  截圖:

 

 (7)利用視圖刪除數據。

 語句:delete from v_emp where empno=1234;

 截圖:

 

  3.利用Scott.emp 創建只讀視圖。

語句:

create or replace VIEW v_emp_readonly
 as
 select empno,ename,job,hiredate,deptno 
 from scott.emp
 with read only;

截圖:

 

對視圖執行刪除操作,測試視圖的只讀性:

語句:delete from v_emp_readonly where empno=7782;

截圖:

 

  4.利用Scott.emp創建具有With check option 選項的檢查視圖。

語句:

create or replace VIEW v_emp_check
as 
select empno,ename,job,hiredate,deptno
from scott.emp
where deptno=10
with check option;

截圖:

 

創建檢查視圖,通過視圖對數據源表執行插入和修改操作。

語句:

insert into v_emp_check
values(1235,'JACK','CLERK','29-4月-1963',20);

截圖:

 

部門編號20 不符合Where 條件,插入失敗。

語句:update  v_emp_check set deptno=20 where deptno=10;

截圖:

 

修改后的新數據不符合where 條件,修改失敗。

 

5.利用Scott方案下的emp表和Dept表創建連接視圖,查詢部門編號為10和30的部門及雇員信息。

創建視圖:

語句:

create or replace VIEW v_dept_emp
as
select a.deptno,a.dname,a.loc,b.empno,b.ename,b.sal
from scott.dept a,scott.emp b 
where a.deptno=b.deptno and a.deptno in (10,30);

截圖:

 

利用視圖查詢表中的數據:

 

查看視圖中個字段的可更新性:

語句:select * from USER_UPDATABLE_COLUMNS where table_name='V_DEPT_EMP';

截圖:

 

 

(習題)

 1.簡述索引有哪些類型,並說明什么情況下適合建立反向鍵索引,什么情況下適合建立位圖索引。

答:常見的索引類型包括B樹索引﹑位圖索引﹑反向鍵索引﹑基於函數的索引﹑全局索引和局部索引等。 反向鍵索引是一種特殊類型的B樹索引,特別適合基於有序數列建立的索引。

當列的值是可以枚舉(也就是說列的值差異性較小)的時候適合建立位圖索引。

 

 2.簡述視圖的概念以及利用視圖操作數據的優點。

答:

視圖的概念:視圖是一個虛擬表,其內容由查詢定義。 同真實的表一樣,視圖包含一系列帶有名稱的列和行數據,用戶可以像使用普通表一樣對視圖執行各種DML操作,如SELECT、insert、update、delete。但是,視圖並不在數據庫中真正存儲有數據,它的數據來自於定義視圖的查詢所引用的表,而且這些數據是在使用視圖時動態生成的。因此視圖在數據庫中只對應着一個SELECT語句的定義,可以從一個表或多個表中查詢。對視圖的各種操作實際上是對SELECT語句中數據源表的操作,當數據源中的數據發生變化時,視圖的查詢結果也會發生變化。

利用視圖操作數據的優點:

(1)簡化數據操作

包含的數據較少

將對多個表的操作簡化為對一個視圖的操作

(2)增強數據的安全性

可以將安全性控制到任意的數據子集

(3)定制數據

不同的級別的用戶可以看到不同用途的數據集

(4)合並與分割數據

(5)利用視圖修改源表

 

 3.簡述可更新視圖應具有哪些特點。

答:

(1)創建視圖時不能選擇WITH READ ONLY選項。

(2)視圖中的非計算列或非聚合運算,即數據源表中的原始字段,才可以被更新。

(3)視圖的定義中SELECT語句不能包含DISTINCT關鍵字。

(4)視圖的定義中SELECT語句不能包含集合操作如,UNION、INTERSECT等。

(5)視圖的定義中SELECT語句不能包含GROUP BY子句和HAVING子句。

(6)用戶必須對視圖的數據源表具有顯示的操作權限才可以。

(7)只有在視圖中可見的行和列才可能被修改或刪除。

 

 4.操作題:

  (1)建立一個表myEMP ,表結構和表中數據與scott.emp相同。

語句:

create table myEMP
 as 
 select * from scott.emp;

截圖:

 

  (2)在myEMP表中建立基於字段empno的唯一索引。

語句:create unique index index_empno on myEMP(empno);

截圖:

 

  (3)建立一個視圖myV_emp,視圖包括myEMP表中的empno、ename、sal,並按sal從大到小排列。

語句:

Create or replace VIEW myV_emp
As
Select empno,ename,sal
From myEMP
Order by sal desc;、

截圖:

 

 

(實驗)

1.使用新建序列的值,為新表填充字段值。

(1)創建一張新表。

 

(2)創建序列id_seq。

 

(3)將序列的值插入到新表中。

 

 

2.以scott用戶登錄數據庫,並在數據庫中創建emp表的同義詞s_e。

(1)以system 用戶登錄后授予scott用戶創建同義詞的權限。

 

 

(2)以scott用戶登錄,創建公有同義詞。

 

(3)以System用戶登錄,利用同義詞來操作原表。

 

 

 

(P199 10.4 習題)

1.簡述同義詞和序列的概念。

答:

同義詞的概念:

同義詞是表、索引、視圖等方案對象的一個別名,不占據任何實際的存儲空間,只在數據字典中保存其定義。

 

序列的概念:

序列可在當前方案下產生一系列唯一數字,可以用這些數字產生表的主鍵值,也可以參與其他運算。序列也可以在多用戶並發環境中使用,為所有用戶生成不重復的順序數字,而且不需要任何額外的I/O開銷。

 

2.簡述使用同義詞的好處。

答:同義詞可以簡化原數據庫對象的名稱,方面用戶對數據庫對象的引用。

 

3.序列常用的兩個運算符是什么?各代表什么意義?

答:序列常用的兩個運算符是NEXTVAL和CURRVAL。NEXTVAL將返回序列生成的下一個值,而CURRVAL將返回序列的當前值。第一次應用序列時,需要使用NEXTVAL,返回的是初始值。而以后再使用NEXTVAL運算符時,會使序列自動增加INCREMENT BY后面定義的值。

 

 

create or replace VIEW v_emp_check

as

select empno,ename,job,hiredate,deptno

from scott.emp

where deptno=10

with check option;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM