視圖是指計算機數據庫中的視圖,是一個虛擬表,其內容由查詢定義。同真實的表同樣,視圖包含一系列帶有名稱的列和行數據。可是,視圖並不在數據庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,而且在引用視圖時動態生成。mysql
關係型數據庫中的數據是由一張一張的二維關係表所組成,簡單的單表查詢只須要遍歷一個表,而複雜的多表查詢須要將多個錶鏈接起來進行查詢任務。對於複雜的查詢事件,每次查詢都須要編寫MySQL代碼效率低下。爲了解決這個問題,數據庫提供了視圖(view)功能。sql
視圖是虛擬表,自己不存儲數據,而是按照指定的方式進行查詢。數據庫
視圖的本質是SQL指令(select 語句)函數
基本語法:create[or repalce] view 視圖名字 as select 指令 [with check option]; //能夠是單表數據,也能夠是鏈接查詢,聯合查詢或者子查詢blog
表裏面不能出現同名字段因此會顯示重複。事件
查看視圖:視圖自己是虛擬表,全部關於表的一些操做都適合視圖。it
視圖是一張虛擬表,能夠直接把視圖當作「表」操做,可是視圖自己沒有數據,是臨時執行select語句獲得對應的結果。視圖主要用於查詢操做。io
基本語法:select 字段列表 from 視圖名字[各類子句];效率
修改視圖:本質是修改視圖對應的查詢語句select
基本語法:alter view 視圖名字 as 新select指令;
基本語法:drop view 視圖名字;
由於視圖自己沒有數據,所以對視圖進行的dml操做最終都體如今基表中。視圖的DML操做,不是全部的視圖均可以作DML操做。
有下列內容之一,視圖不能作DML操做:
①select子句中包含distinct
②select子句中包含組函數
③select語句中包含group by子句
④select語句中包含order by子句
⑤select語句中包含union 、union all等集合運算符
⑥where子句中包含相關子查詢
⑦from子句中包含多個表
⑧若是視圖中有計算列,則不能更新
⑨若是基表中有某個具備非空約束的列未出如今視圖定義中,則不能作insert操做
含義:對視圖所作的DML操做的結果,不能違反視圖的WHERE條件的限制
嵌套視圖:定義在另外一個視圖的上面的視圖
mysql> create view v_ear_veterans
-> as
-> select * from v_veterans
-> where JOINED < 1980;
使用WITH CHECK OPTION約束時,(不指定選項則默認是CASCADED)
可使用CASCADED或者 LOCAL選項指定檢查的程度:
①WITH CASCADED CHECK OPTION:檢查全部的視圖
例如:嵌套視圖及其底層的視圖
②WITH LOCAL CHECK OPTION:只檢查將要更新的視圖自己
對嵌套視圖不檢查其底層的視圖