MySQL視圖(View)學習教程及執行個體

來源:互聯網
上載者:User

一,什麼視圖

視圖是存放資料的一個介面,也可以說是虛擬表。這些資料可以是從一個或幾個基本表(或視圖)的資料。也可以是使用者自已定義的資料。其實視圖裡面不存放資料的,資料還是放在基本表裡面,基本表裡面的資料發生變動時,視圖裡面的資料隨之變動。

二,視圖有什麼用

1,視圖可以讓查詢變得很清楚
如果您要找的資料存放在三張關係表裡面,查看資料的時候,你就要寫個聯集查詢了。換種方法,我把聯集查詢的資料放到視圖裡面,這樣查詢起來是不是更方便呢,通phpmyadmin看著是不是更清淅呢。

2,保護資料庫的重要資料,給不同的人看不同的資料
假如您讓別人幫您開發一套系統,但是你又想把真正表的暴露出來,這個時候視圖是不是最好的選擇呢。

三,視圖的類型

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

1,MERGE,會將引用視圖的語句的文本與視圖定義合并起來,使得視圖定義的某一部分取代語句的對應部分。
2,TEMPTABLE,視圖的結果將被置於暫存資料表中,然後使用它執行語句。
3,UNDEFINED,MySQL將選擇所要使用的演算法。如果可能,它傾向於MERGE而不是TEMPTABLE,這是因為MERGE通常更有效,而且如果使用了暫存資料表,視圖是不可更新的。

四,添加視圖

1,添加規則

 代碼如下 複製代碼
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] 
 
VIEW view_name [(column_list)] 
 
AS select_statement 
 
[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) 



上面我們說了,視圖裡面沒有真正的資料,那在資料倉儲裡面,他的儲存是什麼樣子的呢。看下面

 代碼如下 複製代碼
[root@BlackGhost test]# cat /usr/local/mysql/data/test/aaa.frm 
TYPE=VIEW 
query=select `test`.`user`.`id` AS `id`,`test`.`user`.`name` AS `name`,`test`.`user`.`sex` AS `sex` from `test`.`user` 
md5=04d5ab2cc3ffcf3376a5e9c946f858ab 
updatable=1 
algorithm=2 
definer_user= 
definer_host= 
suid=2 
with_check_option=0 
revision=1 
timestamp=2010-10-20 19:59:34 
create-version=1 
source=select * from user 
client_cs_name=utf8 
connection_cl_name=utf8_general_ci 
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,修改規則

 代碼如下 複製代碼

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] 
 
VIEW view_name [(column_list)] 
 
AS select_statement 
 
[WITH [CASCADED | LOCAL] CHECK OPTION] 


2,執行個體

 代碼如下 複製代碼

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



六,查看,刪除視圖

 代碼如下 複製代碼

mysql> select * from aaa;    //查看視圖資料 
+----+------+-----+ 
| id | name | sex | 
+----+------+-----+ 
|  3 | tank |   0 | 
|  4 | tank |   0 | 
+----+------+-----+ 
2 rows in set (0.00 sec) 
 
mysql> show create view aaaG;  //查看視圖 
*************************** 1. row *************************** 
View: aaa 
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`) 
character_set_client: utf8 
collation_connection: utf8_general_ci 
1 row in set (0.00 sec) 

mysql> drop view aaa;   //刪除視圖 
Query OK, 0 rows affected (0.00 sec) 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.