MySQL視圖-(視圖創建,修改,刪除,查看,更新數據)


 

 

 

視圖是一種虛擬存在的表,對於使用視圖的用戶來說基本上是透明的。視圖並不在數據庫中實際存在,行和列數據來自定義視圖的查詢總使用的表,並且是在使用視圖時動態生成的。

 

視圖相對於普通表的優勢:

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

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

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

 

創建視圖

CREATE [OR REPLACE] VIEW 視圖名(列1,列2...)

AS SELECT (列1,列2...)

FROM ...;

[WITH [CASCADED|LOCAL] CHECK OPTION]

 

修改視圖

CREATE OR REPLACE VIEW 視圖名 AS SELECT [...] FROM [...];

[WITH [CASCADED|LOCAL] CHECK OPTION]

 

查看視圖

show tables;

desc 視圖名

 

 

查看視圖定義

show create view 視圖名稱\G

 

 

通過視圖變更數據

insert into 視圖名

update 視圖名

[WITH [CASCADED|LOCAL] CHECK OPTION] 決定了是否允許更新數據記錄不再滿足視圖的條件。

local只要滿足本視圖的條件就可以更新

cascaded則必須滿足所有針對該視圖的所有視圖的條件才可以更新,默認是cascaded。

為了防止通過視圖修改導致數據無故丟失,建議加上WITH CHECK OPTION

 

視圖的可更新性和視圖中查詢的定義有關系,一下類型的視圖是不可更新的。

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

2.常亮視圖。

3.select中包含子查詢。

4.jion

5.from一個不能更新的視圖

6.where句子的子查詢引用了from句子中的表

 

 

刪除視圖

drop view 視圖名稱

 

 

 

備注:

1.可以通過視圖插入數據,但是只能基於一個基礎表進行插入,不能跨表更新數據

2.視圖不是表,不保存數據,只是一張虛擬的表,源表的數據發生變化后,視圖的結果也同步發生變化

3. 一般情況下,在創建有條件限制的視圖時,加上“WITH CHECK OPTION”命令。


免責聲明!

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



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