MySQL 学习笔记(5)— 视图优缺点、创建视图、修改视图、删除视图
1. 視圖概念
簡單來說,視圖就是一個預定義的查詢語句。視圖在許多情況下可以當作表來使用,因此也被稱為虛擬表(Virtual Table)。
視圖與表最大的區別在于它不包含數據,數據庫中只存儲視圖的定義語句。
 視圖提供了一種 MySQL 的 SELECT 語句層次的封裝,可用來簡化數據處理以及重新格式化基礎數據或保護基礎數據。
2. 視圖優缺點
2.1 優點
-  替代復雜查詢,減少復雜性。 
 將復雜的查詢語句定義為視圖,然后使用視圖進行查詢,可以隱藏具體的實現;
-  提供一致性接口,實現業務規則。 
 在視圖的定義中增加業務邏輯,對外提供統一的接口;當底層表結構發生變化時,只需要修改視圖接口,而不需要修改外部應用,可以簡化代碼的維護并減少錯誤;
-  控制對于表的訪問,提高安全性。通過視圖為用戶提供數據訪問,而不是直接訪問表;同時可以限制允許訪問某些敏感信息,例如身份證號、工資等。 
2.2 缺點
-  不當的使用可能會導致性能問題。 
 視圖的定義中可能包含了復雜的查詢,例如嵌套的子查詢和多個表的連接查詢,可能導致使用視圖進行查詢時性能不佳;
-  視圖通常用于查詢操作,可更新視圖( Updatable View)需要滿足許多限制條件。可更新視圖可以支持通過視圖對底層表進行增刪改的操作。
3. 創建視圖
CREATE VIEW 視圖名稱 (視圖列名1,視圖列名2)
AS 
SELECT語句
eg:
CREATE VIEW product_sum (product_type, cnt_product)
AS
SELECT product_type, COUNT(*) FROM product GROUP BY product_type;
使用視圖
SELECT product_type, cnt_product FROM product_sum;
應該避免在視圖的基礎上創建視圖,因為多重視圖會降低 SQL 的性能;定義視圖時不要使用 ORDER BY 子句。
建議最好不要在視圖的定義中使用 ORDER BY,因為這種排序并不能保證最終結果的順序;而且可能由于不必要的排序降低查詢的性能。
4. 修改視圖
如果需要修改視圖的定義,可以刪除并重新創建視圖。除此之外,各種數據庫也提供了直接替換視圖定義的命令:
-- Oracle、MySQL 以及 PostgreSQL 實現
CREATE OR REPLACE VIEW view_nameAS select_statement;-- SQL Server 實現
CREATE OR ALTER VIEW view_nameAS select_statement;
其中 CREATE OR REPLACE VIEW 表示如果視圖不存在,創建視圖;如果視圖已經存在,替換視圖。SQL Server 使用 CREATE OR ALTER VIEW 實現相同的功能。
MySQL和SQL Server還支持使用ALTER VIEW view_name AS select_statement; 命令修改視圖的定義。
Oracle和PostgreSQL中的ALTER VIEW命令用于修改視圖的其他屬性。
5. 刪除視圖
使用 DROP VIEW 命令可以刪除一個視圖:
DROP VIEW [IF EXISTS] view_name;
指定 IF EXISTS 選項后,刪除一個不存在的視圖時也不會產生錯誤。Oracle 不支持 IF EXISTS 選項。
6. 可更新視圖
可更新視圖是指通過視圖更新底層表,對于視圖的 INSERT、UPDATE、DELETE 等操作最終會轉換為針對底層基礎表的相應操作。可更新視圖的定義需要滿足許多限制條件,包括:
- 不能使用聚合函數或窗口函數,例如 AVG、SUM、COUNT等;
- 不能使用 DISTINCT、GROUP BY、HAVING子句;
- 不能使用集合運算符,例如 UNION、INTERSECT等;
- 修改操作只能涉及單個表中的字段,不能同時修改多個表;
- 不同數據庫實現的其他限制條件。
總之,對視圖的修改只有在能夠映射為對基礎表的修改時,數據庫才能執行視圖的修改操作。
總結
以上是生活随笔為你收集整理的MySQL 学习笔记(5)— 视图优缺点、创建视图、修改视图、删除视图的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 上字开头的四字成语有哪些啊?
- 下一篇: 凌度多少钱啊?
