在查詢中 , 我們經常把查詢結果?當成臨時表來看 .
View 是什么 ??View 可以看一張虛擬表 .? 是表通過某種運算得到的一個投影 .
既然視圖只是表的某種查詢的投影 , 所以主要步驟在于查詢表上 . 查詢的結果命名為視圖就可以了 .
視圖與表的關系
視圖是表的查詢結果 , 自然表的數據改變了 , 影響視圖的結果 .
?
視圖改變了呢 ?
0:? 視圖增刪改也會影響表
1:? 但是 , 視圖并是總是能增刪改的 .
?
視圖某種情況下 , 是可以修改的 .
要求 :? 視圖的數據和表的數據? 11 對應 .? 就像函數的映射 .
表 --> 推出視圖對應的數據
視圖 --> 推出表對應的數據
視圖的定義 :
視圖是由查詢結果形成的一張虛擬表 . 是 sql 查詢結果
?
視圖的創建語法 :
Create?view? 視圖名? as??select? 語句 ;
?
視圖的刪除語法 :
Drop?view? 視圖名
?
視圖的修改
Alter?view? 視圖名? as?select?xxxxxx
?
?
為什么要視圖 ?
答 :1: 可以簡化查詢
?
2:? 可以進行權限控制
把表的權限封閉 , 但是開放相應的視圖權限 , 視圖里只開放部分數據
?
3:? 大數據分表時可以用到
比如 , 表的行數超過 200 萬行時 , 就會變慢 ,
可以把一張的表的數據拆成 4 張表來存放 .?
視圖的 algorithm
Algorithm?=?merge/?temptable/?undefined
Merge:? 當引用視圖時 , 引用視圖的語句與定義視圖的語句合并 .
Temptable: 當引用視圖時 , 根據視圖的創建語句建立一個臨時表
Undefined: 未定義 , 自動 , 讓系統幫你選 .
?
Merge, 意味著視圖只是一個規則 , 語句規則 ,? 當查詢視圖時 ,
把查詢視圖的語句 ( 比如 where 那些 ) 與創建時的語句 where 子句等合并 , 分析 .
形成一條 select? 語句 .
例 :? 創建視圖的語句 :
mysql>?create?view?g2?as?select?goods_id,cat_id,goods_name,shop_price?from?goods?where?shop_price>2000
查詢視圖的語句 :
select?*?from?g2??where?shop_price?<?3000;
?
最終執行的語句 :
select?goods_id,cat_id,goods_name,shop_price?from?goods?where?shop_price?>?2000?and?shop_price?<?3000
?
而 temptable 是根據創建語句瞬間創建一張臨時表 ,
然后查詢視圖的語句從該臨時表查數據 .
create?algorethm=temptable?view?g2?as?select?goods_id,cat_id,goods_name,shop_price?from?goods?where?shop_price?>?2000
查詢視圖的語句 :
?select?*?from?g2??where?shop_price?<?3000;
?
最終執行的 2 句話 :? 取數據并放在臨時表 , 然后去查臨時表 .
Select??goods_id,cat_id,goods_name,shop_price?from?goods?where?shop_price?>?2000;
========>?temptable
?
再次查臨時表
Select?*?from?temptable?where?shop_price<?3000
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
