MySQL View(檢視)詳解
從使用者角度來看,一個檢視是從一個特定的角度來檢視資料庫中的資料。從資料庫系統內部來看,一個檢視是由 SELECT 語句組成的查詢定義的虛擬表。
從資料庫系統內部來看,檢視是由一張或多張表中的資料組成的,從資料庫系統外部來看,檢視就如同一張表一樣,對錶能夠進行的一般操作都可以應用於檢視,例如查詢,插入,修改,刪除操作等。
檢視是一個虛擬表,其內容由查詢定義。
概述:
□ 檢視以經過定製的方式顯示來自一個或多個表的資料
□ 檢視是一種資料庫物件,使用者可以象查詢普通表一樣查詢檢視。
□ 檢視內其實沒有儲存任何資料,它只是對錶的一個查詢。
□ 檢視的定義儲存在資料字典內。建立檢視所基於的表為“基表”。
□ 檢視一經定義以後,就可以像表一樣被查詢、修改、刪除和更新。
作用:
□ 簡化資料查詢語句
□ 使使用者能從多角度看到同一資料
□ 提高了資料的安全性
□ 提供了一定程度的邏輯獨立性
□ 減少頻寬流量、最佳化後還可提高執行效率
優點:
□ 提供了另外一種級別的表安全性
□ 隱藏的資料的複雜性
□ 簡化的使用者的 SQL 命令
□ 透過重新命名列,從另一個角度提供資料
檢視的建立:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
說明:
□ OR REPLACE:給定了 OR REPLACE 子句,語句能夠替換已有的同名檢視。
□ ALGORITHM:可選的mysql演算法擴充套件,演算法會影響MySQL處理檢視的方
式。有以下三個值:
UNDEFINED--MySQL 將選擇所要使用的演算法。如果可能,它傾向於
MERGE 而不是 TEMPTABLE,這是因為 MERGE 通常更有效,而且如果使用了臨時 表,檢視是不可更新的。
MERGE--會將引用檢視的語句的文字與檢視定義合併起來,使得檢視定義 的某一部分取代語句的對應部分。
TEMPT ABLE--檢視的結果將被置於臨時表中,然後使用它執行語句。
□ veiw_name:檢視名。
□ column_list:要想為檢視的列定義明確的名稱,列出由逗號隔開的列名。
column_list 中的名稱數目必須等於 SELECT 語句檢索的列數。若使用 與源表或檢視中相同的列名時可以省略 column_list。
□ select_statement: 用來建立檢視的 SELECT 語句,可在 SELECT 語句 中查詢多個表或檢視。但對 SELECT 語句有以下的限制:
1. 定義檢視的使用者必須對所參照的表或檢視有查詢(即可執行 SELECT 語句)許可權;
2. 在定義中引用的表或檢視必須存在;
□ WITH [cascaded|local] CHECK OPTION: 在關於可更新檢視的 WITH CHECK OPTION 子句中,當檢視是根據另一個檢視定義的時,LOCAL 和 CASCADED 關鍵字決定了檢查測試的範圍。LOCAL 關鍵字對 CHECK OPTION 進行了限制,使其僅作用在定義的檢視上,CASCADED 會對將進行評估的基表 進行檢查。如果未給定任一關鍵字,預設值為 CASCADED。WITH CHECK OPTION 指出在可更新檢視上所進行的修改都要符合 select_statement 所指定的 限制條件,這樣可以確保資料修改後,仍可透過檢視看到修改的資料。
檢視定義服從下述限制:
□ SELECT 語句不能包含 FROM 子句中的子查詢。
□ SELECT 語句不能引用系統或使用者變數。
□ SELECT 語句不能引用預處理語句引數。
□ 在儲存子程式內,定義不能引用子程式引數或區域性變數。
□ 在定義中引用的表或檢視必須存在。但是,建立了檢視後,能夠捨棄定義引用的表或檢視。要想檢查檢視定義是否存在這類問題,可使用 CHECK TABLE 語句。
□ 在定義中不能引用 TEMPORARY 表,不能建立 TEMPORARY 檢視。
□ 在檢視定義中命名的表必須已存在。
□ 不能將觸發程式與檢視關聯在一起。
修改檢視:
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
說明:
該語句用於更改已有檢視的定義。其語法與 CREATE VIEW 類似。該語句需要具有針對檢視的 CREATE VIEW 和 DROP 許可權,也需要針對 SELECT 語句中引用的每一列的某些許可權。
檢視檢視:
SHOW CREATE VIEW view_name
說明:
該語句給出了 1 個建立給定檢視的 CREATE VIEW 語句。
刪除檢視:
DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]
說明:
□ DROP VIEW 能夠刪除 1 個或多個檢視。必須在每個檢視上擁有 DROP 許可權。
□ 可以使用關鍵字 IF EXISTS 來防止因不存在的檢視而出錯。
□ 如果給定了 RESTRICT 和 CASCADE,將解析並忽略它們。
更新檢視:
概述:
檢視的使用與表一樣,有增刪改查四種操作,且語法也與表相同。
在檢視上也可以使用修改資料的 DML 語句,如 INSERT、UPDATE 和 DELETE可以統稱為“透過檢視更新資料”。
透過檢視更新資料有如下限制:
□ 一次只能修改一個底層的基表
□ 如果修改違反了基表的約束條件,則無法更新檢視
□ 如果檢視中的列不是表中的原始列(如建立檢視時使用了連線運算子、聚合函式等),則不能透過檢視更新。
檢視更新操作:
□ 可更新的檢視:要透過檢視更新基本表資料,必須保證檢視是可更新檢視, 即可以在 INSET、UPDATE 或 DELETE 等語句當中使用它們。對於可更新 的檢視,在檢視中的行和基表中的行之間必須具有一對一的關係。還有一 些特定的其他結構,這類結構會使得檢視不可更新。如果檢視包含下述結構中的任何一種,那麼它就是不可更新的:
□ 聚合函式;
□ DISTINCT 關鍵字;
□ GROUP BY子句;
□ ORDER BY子句;
□ HAVING 子句;
□ UNION 運算子;
□ 位於選擇列表中的子查詢;
□ FROM 子句中包含多個表;
□ SELECT 語句中引用了不可更新檢視;
插入資料:
使用 INSERT 語句透過檢視向基本表插入資料
注意:
□ 當檢視所依賴的基本表有多個時,不能向該檢視插入資料,因為這將會 影響多個基本表。
□ 對 INSERT 語句還有一個限制:SELECT 語句中必須包含 FROM 子句中 指定表的所有不能為空的列。
修改資料:
使用 UPDATE 語句可以透過檢視修改基本表的資料
注意:若一個檢視依賴於多個基本表,則一次修改該檢視只能變動一個基本表的資料。
刪除資料:
使用 DELETE 語句可以透過檢視刪除基本表的資料
注意:對依賴於多個基本表的檢視,不能使用 DELETE 語句。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1784095/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL View 檢視MySqlView
- View Transform(檢視變換)詳解ViewORM
- ThinkPHP框架檢視詳細介紹View檢視–模板(九)PHP框架View
- mysql檢視binlog日誌詳解MySql
- Mysql系列第十四講 檢視詳解MySql
- 物化檢視詳解
- oracle檢視詳解Oracle
- materialized view (物化檢視)ZedView
- calcite物化檢視詳解
- Oracle物化檢視詳解Oracle
- ZT 物化檢視詳解
- MySQL EXPLAIN命令詳解學習(檢視執行計劃)MySqlAI
- 檢視所有VIEW/TABLE in MSSQLViewSQL
- 資料庫檢視詳解資料庫
- MySQL show processlist命令詳解及檢視當前連線數MySql
- 建立物化檢視MV ( Materialized View )ZedView
- Django(58)viewsets檢視集詳解DjangoView
- Android 檢視架構詳解Android架構
- 資料庫檢視詳解 (轉)資料庫
- 在列印視窗,列印檢視View的子檢視結構圖View
- MYSQL 檢視MySql
- Mysql檢視:MySql
- hive中的 lateral view(側檢視)HiveView
- android 動畫 ——檢視動畫(View Animation)Android動畫View
- 檢視合併(View Merging)View
- 轉:物化檢視(Materialized View)介紹ZedView
- Dataguard (Standby) 相關的檢視(View)View
- dlg中獲得view檢視物件 包含view標頭檔案出錯 解決方法View物件
- MySQL資料庫檢視:檢視定義、建立檢視、修改檢視MySql資料庫
- View 體系詳解:View 的工作流程View
- 詳解 View ControllerViewController
- [MySQL View]最有意思的檢視view優化過程,從30分鐘到0.08秒MySqlView優化
- MySQL 建立檢視MySql
- Mysql檢視程式MySql
- Mysql版本檢視MySql
- mysql 檢視索引MySql索引
- laravel利用artisan建立view檢視檔案LaravelView
- oracle parallel並行及px檢視viewOracleParallel並行View