標籤:style blog http color ar sp 資料 on art
原文: mysql基礎之視圖
在查詢中,我們經常把查詢結果 當成暫存資料表來看.
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
mysql基礎之視圖