1. 程式人生 > >mysql 視圖

mysql 視圖

alter out 定義 func show price 頻繁 ews 權限

1,什麽是視圖
視圖是由查詢結果形成的一張虛擬表。

2,什麽時候要用到視圖?
如果某個查詢結果出現的非常頻繁,也就是,要經常拿這個查詢結果來做子查詢。

3,視圖的創建語法
create view 視圖層 as select 語句。

4,使用視圖有什麽好處?
(1)簡化查詢語句
比如:有一張商品表,我們經常要查每個欄目下商品的平均價格
select cat_id,avg(shop_price) from goods gropy by cat_id;
這時候我們就可以創建一張視圖:
create view avgPrice as select cat_id,avg(shop_price) from goods gropy by cat_id;
創建完,以後我們要查每個欄目的平均價格時,只要這麽寫
select * from avgPrice;就可以了。
(2)可以進行權限控制
把表的權限封閉,但是開放相應的視圖權限,視圖裏只開放部分數據列
比如我們的goods商品表,我們不想讓別人看到我們的銷售價格,這時候我們就可以把查看商品表的權限封閉,創建一張視圖
create view showGoods as select goods_id,goods_name from goods;
不出現銷售價格列就可以了。
(3)大數據分表時可以用到
比如表的行數據超過200萬行時,速度就會變慢,可以把一張表的數據拆成4張表來存放
News表
newsid 1,2,3,4...
news1,news2,news3,news4表
把一張表的數據分散到4張表裏,
可以用視圖,把四張表形成一張視圖
create view news as select * from news1 union select * from news2 union ...

5,視圖的修改
alter view 視圖名 as select 語句;

6,視圖與表的關系
視圖是表的查詢結果,自然表的數據變了,會影響視圖的結果

7,試圖改變會影響到表嗎?
(1)視圖的增刪改查也會影響到表;
(2)視圖並不是總是能增刪改查的;
視圖的數據與表的數據---對應時可以修改;
對於視圖的insert還應註意:視圖必須包含表中沒有默認值的列

8,視圖的三種類型
註:mysql存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN,OUT,INOUT
Create procedure|function([[IN |OUT |INOUT ] 參數名 數據類形...])
IN 輸入參數
表示該參數的值必須在調用存儲過程時指定,在存儲過程中修改該參數的值不能被返回,為默認值
OUT 輸出參數
該值可在存儲過程內部被改變,並可返回
INOUT 輸入輸出參數
調用時指定,並且可被改變和返回

mysql 視圖