一、涉及內容
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;