實驗八 視圖(V2.0)

實驗  視圖數據庫

1、實驗目的:安全

1.瞭解視圖的概念和與基本表的區別。函數

2.掌握SQL建立視圖的方法。測試

3.掌握視圖更新與基本表更新的相關性spa

 

4.3d

2、實驗內容blog

1.基本知識排序

建立視圖的命令it

1) create view <視圖名>io

2) as

3) select <目標列>

4) from <表名列表>

5) [where 查詢條件]

6) [group by 分組數據 having 分組篩選條件]

7) [with check option]

 

說明:

1) 視圖名的起名規則,遵循標識符的命名規則。

2) 子查詢的查詢結果爲視圖。視圖是查詢的定義,數據存儲在基本表,因此視圖是虛表。

3) 子查詢不能進行排序因此沒有Order by子句。

4) 當使用with check option子句時,將會在更新視圖時,強制附加where條件的內容。

 

2.建立視圖

實驗1:建立CS系學生信息視圖CS_VIEW

 

 

 

命令:

create view CS_VIEW
as
select *
from student
where sdept = 'CS'
with check option;

 

完成實驗

:建立視圖後,更新基本表(更新200215121學生的年齡爲21歲),從新查看視圖內數據,有沒有更新?將用到的命令、測試過程和說明的問題記錄清楚。

 

會更新。說明視圖只是定義,不保存數據,數據來源於基本表,視圖的數據來源於基本表。視圖是個虛表,不佔用存儲空間。

 

 

實驗2:建立數據庫課程學生成績單。

DS_GRADE(學號,姓名,成績)

 

 

說明:視圖能夠來源於多個表。

注意:視圖也能夠在視圖的基礎上進行建立。

 

實驗3:建立一個各系學生人數統計視圖。SDEPT_VIEW(系名,人數)

Create view sdept_view

As 

Select sdept 系名,count(*) 人數

From student

Group by sdept

 

 

 

視圖的建立可使用分組和彙集函數,使用戶只能看到統計結果,不能看到明細,體現了數據的安全性。

 

3.修改數據更新視圖

 

實驗4:經過CS_View更新CS系學生的年齡增長1歲。

 命令:

update CS_VIEW
set sage = sage + 1;

命令可以執行,查看基本表和視圖數據是否已更新。基本表數據更新了嗎?視圖數據更新了嗎?

 

實驗5:更新DS_GRADE視圖內200215121學生的成績爲85.

命令:update DS_GRADE

             set grade = 85

             where sno = '200215121'

 

結果:命令成功?仍是不成功?爲何?

 

 

4.插入數據更新視圖

實驗6:插入一學生(200215126,張三,男,20)到CS_VIEW視圖。

 命令:

insert into cs_view
values('200215126','張三','男',20)

 

 

查看基本表student和CS_VIEW視圖,有什麼狀況?

基本表內可以查詢到,而CS_View視圖內,沒有

 

說明:

1.在建立視圖CS_VIEW時,沒有加可選子句with check  option,經過視圖插入的數據不通過視圖where子句檢驗,插入的數據不知足sdept爲CS也沒有問題,因此這個沒有sdept的值(爲NULL)數據可以插入(到基本表),而視圖內看不到不是CS系的學生數據。

2.若是在建立CS_VIEW時,使用了with check  option子句,則經過視圖插入數據時,須要檢驗數據是否爲CS系的數據(知足提升安全性的要求),若是知足則可以插入,不然不容許插入。

注意:

在定義視圖時With check option的做用。

 

 

命令7:插入('200215127','李四',87)到視圖DS_GRADE。

命令?

執行狀況?

 

實驗8:插入(’ABC’,1)到SDEPT_VIEW視圖。

 

 

命令是?

 

可以插入嗎?

 

 

4、總結:

0.建立視圖的幾種形式。

 

1.視圖能夠從基本表導出,也能夠從視圖導出。

 

2.視圖不保存數據,數據保存在基本表中。

 

3.更新基本表,視圖數據會發生變化;成功更新視圖,

基本表也會發生變化。

 

4.更新視圖不成功的狀況很常見。不能知足建立視圖where條件的更新不可以更新;有多個表或視圖導出的視圖不可以更新;有group by或彙集函數的視圖不可以更新。

 
相關文章
相關標籤/搜索