程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 小貝_mysqlview視圖學習

小貝_mysqlview視圖學習

編輯:MySQL綜合教程

小貝_mysqlview視圖學習


view視圖

簡要:
1、視圖定義
2、創建視圖
3、視圖與表的關系
4、視圖種類

一、視圖定義

視圖起因: 查詢每個欄目最貴的商品=>

selectgoods_id,goods_name,shop_price from goods order by cat_id asc,shop_price desc; 查詢結果,當成一張表看

如果某個查詢結果出現的非常頻繁,也就是說,拿這個結果進行子查詢出現的非常頻繁.

createtable g2 like goods;insert into g2 select ….

上面兩句,是想保存一個查詢結果到表裡面,供其它查詢用。

視圖定義: 視圖是由查詢結果形成的一張虛擬表。

 

二、創建視圖

mysql>CREATE TABLE t (qty INT, price INT);

mysql>INSERT INTO t VALUES(3, 50);

mysql>CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;

mysql>SELECT * FROM v;

 

為什麼需要視圖?

a、簡化查詢語句

b、可以控制列權限

把表的權限封閉,但是開放相對應的視圖權限。視圖裡只開放部分列部分數據

c、大數據分表時可以用視圖把所分的表形成一張視圖

 

三、視圖與表的關系

測試時用到的表結構及數據

create table t

(id int primary keyauto_increment,

type tinyint unsigned,

name char(5) not nulldefault '',

money tinyint unsigned

)engine=myisamcharset=utf8;

insert intot(type,name,money) values(1,'1a',4),

(1,'1b',3),(2,'2a',3),(1,'1c',4),(2,'2b',5),(3,'3a',5);

問題1: 視圖是表的查詢結果,因此表的數據改變了,會影響視圖的結果

\

\

修改原始表t的id為6的數據

\

查看視圖:

 

\

問題2: 視圖改變了呢?

情況一:視圖的數據與表的數據一一對應,如上述例子中的表t與視圖t_view1

1、修改視圖t_view1的id為6的數據

 

\

查看原始表t

\

2、往視圖t_view1插入數據

\

查看原始表t

\

3、刪除視圖t_view1id為7的數據

\

查看原始表t

\

情況2: 視圖只是原始表的統計結果,並不與原始表數據一一對應

(備注: 創建統計t表相同type的money字段總和的視圖)

\

試著修改下視圖t_view2的數據

\

假設可以進行修改,那麼type為1的money總和加上3後,怎麼對應原始表各個type為1的數據。顯然,這是沒辦法的。因此報錯

從上面這兩種情況,得到:

1、視圖增刪改也會影響表,但是,視圖並不總能增刪改

2、視圖的數據與表的數據一一對應時,則可以

3、對於視圖insert還應注意,視圖必須包含表中沒有默認值的列

四、視圖的種類

4.1、查看視圖創建語法

\

 

針對algorithm的用法:

a、undefined: 由系統默認

b、merge:當algorithm為此值時,創建的視圖只是單純的sql語句存在而不是以虛擬結果表的形式存在。但使用此視圖時,創建視圖的sql語句會與後面的sql語句進行優化,最後得到一條新的sql語句

以merge視圖的方式,求得表t中type相同的money最大值

 

\

再對視圖t_view3進行分組

\

顯然,這個結果不是我們想要的結果。運行 上述sql語句等同於

\

 

這是因為merge不是以虛擬結果表存在,而僅僅是sql語句,因此會與後面的sql語句進行優化後,再進行執行。

c、temptable:會把視圖當做虛擬結果表

以temptable視圖的方式,求得表t中type相同的money最大值

\

再進行對type進行分組

\

 

從上面這兩種情況,得到:

創建視圖建議指定視圖的類型為臨時表

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved