mysql數據庫學習(第十六篇)- 視圖

視圖

視圖的行和列來自定義視圖的查詢中使用的表,並且是在使用視圖時動態生成的。

mysql數據庫學習(第十六篇)- 視圖


創建視圖

mysql數據庫學習(第十六篇)- 視圖


Create view 視圖名字 as ( 單表 or 多表 or 視圖)

Create / Replace [algorithm = {undefined | merge | temptable }] view 視圖名字 [(column_list)] as ( 單表 or 多表 or 視圖) [with [cascaded | local ] check option ]


視圖基表有多張時,注意字段名不能重複!


查看視圖

mysql數據庫學習(第十六篇)- 視圖


Show tables ; -- 可以看到視圖

Desc 視圖名稱; -- 可以看到視圖結構(字段)

Show create table 視圖名稱; -- 可以查看到創建視圖語句


mysql數據庫學習(第十六篇)- 視圖


Show create view 視圖名稱; -- 可以查看到創建視圖語句


使用視圖

當做表進行查詢就行了


修改視圖

mysql數據庫學習(第十六篇)- 視圖


刪除視圖

Drop view 視圖名稱;

Drop table 視圖名稱; -- 不能是table這樣刪除,否則報錯(已測過)


視圖的限制

1、 Mysql的視圖在from 關鍵字後面不能包含子查詢。

解決方案:可以先將子查詢的內容先定義成一個視圖,然後對該視圖再創建視圖就可以實現類似的功能了。

2、 視圖的可更新性和視圖中查詢的定義有關係,有以下類型的視圖是不可更新的

①:包含以下關鍵字的sql語句:聚合函數(sum,min,max,count等等)、distinct、group by、 having、 union 、 或者union all 。

②:常量視圖。

例如:create or replace view view_pi as select 3.1415926 as pi ;

③:select 中包含子查詢

④:join

⑤:from一個不能更新的視圖

⑥:where子句的子查詢引用了from子句中的表。

With [cascaded | local ] check option 決定了是否允許更新數據使記錄不再滿足視圖的條件。

Local:只要滿足本視圖的條件就可以更新;

Cascaded:必須滿足所有針對該視圖的所有視圖的條件才可以更新。

沒有指定的話,默認是cascaded 。

1、 Create or replace view payment_view as select payment_id , amount from payment where amount < 10 with check option ;


2、 Create or replace view payment_view2 as select payment_id , amount from payment_view where amount >5 with local check option ;

3、 Create or replace view payment_view3 as select payment_id , amount from payment_view where amount >5 with cascaded check option ;


修改視圖:

4、 Update payment_view2 set amount = 10 where payment_id = 3; --修改成功

5、 Update payment_view3 set amount = 10 where payment_id = 3; --修改失敗。

Payment_view2 是with local check option 的,所以滿足本視圖的條件就可以更新。

但是payment_view3 是 with cascaded check option 的,必須滿足針對該視圖的所有視圖才可以更新,因為更新後記錄不再滿足payment_view 的條件,所以更新操作提示錯誤退出。


視圖的優勢

簡單: 使用視圖的用戶完全不需要關心後面對應的表的結構,關聯條件和篩選條件,對用戶來說已經是過濾好的複合條件的結果集。

安全: 使用視圖的用戶只能訪問他們被允許查詢的結果集,對錶的權限管理並不能限制到某個行某個列,但是通過視圖就可以簡單的實現。

數據獨立: 一旦視圖的結構確定了,可以屏蔽表結構變化對用戶的影響,源表增加列對視圖沒有影響;源表修改列名,則可以通過修改視圖來解決,不會造成對訪問者的影響。


視圖意義

mysql數據庫學習(第十六篇)- 視圖


視圖數據操作

mysql數據庫學習(第十六篇)- 視圖


新增數據

mysql數據庫學習(第十六篇)- 視圖

mysql數據庫學習(第十六篇)- 視圖


刪除數據

1. 多表視圖不能刪除(一般說的多表是連接多張表)

2. 單表視圖可以刪除

更改數據

多表視圖和單表視圖都可以修改數據,

視圖本身只有結構,沒有數據,但是他能夠修改基表的數據。

前提是,他只能修改那些視圖中出現的數據,那些基表存在,而視圖中沒有出現的數據,他根據猜測而想修改的是無效的,不起作用的。因為,他只能修改視圖中出現的數據!!


更新限制

mysql數據庫學習(第十六篇)- 視圖


mysql數據庫學習(第十六篇)- 視圖


視圖算法

mysql數據庫學習(第十六篇)- 視圖


mysql數據庫學習(第十六篇)- 視圖

mysql數據庫學習(第十六篇)- 視圖


五子句:order by; group by; having ; where ;limit;

mysql數據庫學習(第十六篇)- 視圖



分享到:


相關文章: