共計 1933 個字符,預計需要花費 5 分鐘才能閱讀完成。
這篇文章主要介紹了 mysql 視圖指的是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇 mysql 視圖指的是什么文章都會有所收獲,下面我們一起來看看吧。
mysql 視圖是一個虛擬表,其內容由查詢定義;視圖包含系列帶有名稱的列和行數據,而行和列數據來自定義視圖的查詢所引用的表,并且在引用視圖時動態生成,簡單的來說視圖是由 select 結果組成的表。
什么是視圖
視圖是一個虛擬表,其內容由查詢定義。
同真實的表一樣,視圖包含系列帶有名稱的列和行數據。
行和列數據來自定義視圖的查詢所引用的表,并且在引用視圖時動態生成。
簡單的來說視圖是由 select 結果組成的表。
舉個栗子
使用查詢表命令
SELECT * FROM 表名 ;
查出來可以看到一張表,你看到的內容就叫視圖。
視圖的特性
視圖是對若干張基本表的引用,是一張虛表,是查詢語句執行的結果。
它不存儲具體的數據 (基本表數據發生了改變,視圖也會跟著改變)。
它可以跟基本表一樣,進行增刪改查操作 (增刪改操作有條件限制)。
視圖的作用
提高安全性:創建一個視圖,定義好該視圖所操作的數據。之后將用戶權限與視圖綁定。這樣的方式是使用到了一個特性: grant 語句可以針對視圖進行授予權限。
舉個栗子:管理員查詢到的數據中包含各個用戶的密碼,而管理員不想讓用戶看到密碼,則可以用創建視圖的方式只讓用戶看到管理員想讓他看到的數據
查詢性能提高。
提高了數據的獨立性。
創建視圖
假設我們有一張學生表如下
需求:創建視圖并查詢年齡大于 20 的學生
CREATE VIEW stu_age_view
AS(SELECT * FROM stu WHERE age
點擊視圖打開可以看到剛剛創建的表
表里內容為需求內容
基于視圖,我們就可以繼續查詢想要的內容,比如查詢年齡再 21 歲以上名字叫 ls 的人,基于視圖查可以提升效率,減少運行成本。
修改視圖
CREATE OR REPLACE VIEW 視圖名 AS(SELECT [...] FROM [...] );
舉個栗子:上面創建的視圖“stu_age_view”為年齡 20 以上的學生,現在修改為全部學生。
CREATE OR REPLACE VIEW stu_age_view
AS(SELECT * FROM stu);
刪除視圖
DROP VIEW 視圖名稱;
視圖機制替換式
操作視圖時,視圖名直接被視圖定義給替換掉
具化式
mysq| 先得到了視圖執行的結果,該結果形成一個中間結果暫時存在內存中。
外面的 select 語句就調用了這些中間結果 (臨時表)
替換式與具化式區別
替換式: 替換方式,將視圖公式替換后,當成一個整體 sq| 進行處理了。
具化式: 具體化方式,先處理視圖結果,后處理外面的查詢需求。
下面舉個栗子來加深理解
在上面創建視圖時我們已經創建了一個需求為年齡大于 20 的學生的視圖
那么接下來我們查看這個視圖
SELECT * FROM stu_age_view ;
如果是替換式,那么它的內部運行邏輯就為
SELECT * FROM (SELECT *FROM stu WHERE age 20) tihuan;
直接將 stu_age_view 的代碼替換出來;
如果是具化式,那么它就是先把符合條件的查詢出來放在一張表(內存)里,然后直接查詢這張表。
(SELECT * FROM stu WHERE age 20) AS TEMPTABLE;SELECT * FROM TEMPTABLE;
上面這兩條語句無法運行,只是為了方便舉例提出。
那么我們再說回創建視圖
ALGORITHM 參數(三個)
mergeTEMPTABLEUNDEFINED 處理方式替換式,可以進行更新真實表中的數據具化式,由于數據存儲在臨時表中,所以不可以進行更新操作沒有定義 ALGORITHM 參數,mysq 更傾向于選擇替換方式,因為它更加有效。
用參數創建視圖
CREATE ALGORITHM = MERGE VIEW stu_age_viewAS(SELECT * FROM stu WHERE age
還有兩個需要注意的東西是
WITH CHECK OPTION
更新數據時不能插入或更新不符合視圖限制條件的記錄。
比如上面我們查詢了一張年齡大于 20 的視圖,那么在這張視圖里面更新數據時如果年齡小于 20 則會報錯。
LOCAL 和 CASCADED
為可選參數,決定了檢查測試的范圍,默認值為 CASCADED
視圖不可更新部分
聚合函數
DISTINCT 關鍵字
GROUP BY 子句
HAVING 子句
UNION 運算符
FROM 子句中包含多個表
SELECT 語句中引用了不可更新視圖
只要視圖當中的數據不是來自于基表,就不能夠直接修改
關于“mysql 視圖指的是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“mysql 視圖指的是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道。