mysql view(視圖)


一,什么是視圖

視圖是存放數據的一個接口,也可以說是虛擬的表。這些數據可以是從一個或幾個基本表(或視圖)的數據。也可以是用戶自已定義的數據。其實視圖里面不存放數據的,數據還是放在基本表里面,基本表里面的數據發生變動時,視圖里面的數據隨之變動。


二,視圖有什么用

1,視圖可以讓查詢變得很清楚

如果您要找的數據存放在三張關系表里面,查看數據的時候,你就要寫個聯合查詢了。換種方法,我把聯合查詢的數據放到視圖里面,這樣查詢起來是不是更方便呢,通phpmyadmin看着是不是更清淅呢。

2,保護數據庫的重要數據,給不同的人看不同的數據

假如您讓別人幫您開發一套系統,但是你又想把真正表的暴露出來,這個時候視圖是不是最好的選擇呢。

三,視圖的類型

mysql的視圖有三種類型:MERGE、TEMPTABLE、UNDEFINED。如果沒有ALGORITHM子句,默認算法是UNDEFINED(未定義的)。算法會影響MySQL處理視圖的方式。

1,MERGE,會將引用視圖的語句的文本與視圖定義合並起來,使得視圖定義的某一部分取代語句的對應部分。

2,TEMPTABLE,視圖的結果將被置於臨時表中,然后使用它執行語句。

3,UNDEFINED,MySQL將選擇所要使用的算法。如果可能,它傾向於MERGE而不是TEMPTABLE,這是因為MERGE通常更有效,而且如果使用了臨時表,視圖是不可更新的。

四,添加視圖

1,添加規則

1 REATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]  
2   
3  VIEW view_name [(column_list)]  
4   
5  AS select_statement  
6   
7  [WITH [CASCADED | LOCAL] CHECK OPTION]  

2,實例

mysql> use test;  
Database changed  
mysql> create  algorithm = MERGE view aaa as select * from user;//創建一個視圖  
Query OK, 0 rows affected (0.00 sec)  

上面我們說了,視圖里面沒有真正的數據,那在數據倉庫里面,他的存儲是什么樣子的呢。看下面

 1 [root@BlackGhost test]# cat /usr/local/mysql/data/test/aaa.frm  
 2 TYPE=VIEW  
 3 query=select `test`.`user`.`id` AS `id`,`test`.`user`.`name` AS `name`,`test`.`user`.`sex` AS `sex` from `test`.`user`  
 4 md5=04d5ab2cc3ffcf3376a5e9c946f858ab  
 5 updatable=1  
 6 algorithm=2  
 7 definer_user=  
 8 definer_host=  
 9 suid=2  
10 with_check_option=0  
11 revision=1  
12 timestamp=2010-10-20 19:59:34  
13 create-version=1  
14 source=select * from user  
15 client_cs_name=utf8  
16 connection_cl_name=utf8_general_ci  
17 view_body_utf8=select `test`.`user`.`id` AS `id`,`test`.`user`.`name` AS `name`,`test`.`user`.`sex` AS `sex` from `test`.`user` 

創建的視圖,他沒有.MYD,.MYI這二個文件,一個是存放數據的,一個存放索引的。在這兒就可以說明數據是存在基本表里面的。

五,修改視圖

1,修改規則

1 ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]  
2   
3  VIEW view_name [(column_list)]  
4   
5  AS select_statement  
6   
7  [WITH [CASCADED | LOCAL] CHECK OPTION]  

2,實例

1 mysql> alter view aaa as select * from user where id <> any  
2  -> (select u_id from comment);  
3 Query OK, 0 rows affected (0.00 sec)

六,查看,刪除視圖

 1 mysql> select * from aaa;    //查看視圖數據  
 2 +----+------+-----+  
 3 | id | name | sex |  
 4 +----+------+-----+  
 5 |  3 | tank |   0 |  
 6 |  4 | tank |   0 |  
 7 +----+------+-----+  
 8 2 rows in set (0.00 sec)  
 9   
10 mysql> show create view aaa\G;  //查看視圖  
11 *************************** 1. row ***************************  
12  View: aaa  
13  Create View: CREATE ALGORITHM=MERGE DEFINER=``@`` SQL SECURITY DEFINER VIEW `aaa` AS select `user`.`id` AS `id`,`user`.`name` AS `name`,`user`.`sex` AS `sex` from `user` where `user`.`id` <> any (select `comment`.`u_id` AS `u_id` from `comment`)  
14 character_set_client: utf8  
15 collation_connection: utf8_general_ci  
16 1 row in set (0.00 sec)  
17   
18 mysql> drop view aaa;   //刪除視圖  
19 Query OK, 0 rows affected (0.00 sec)  
20

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM