視圖就是一個由查詢到的內容定義的虛擬表。它和真實的表一樣,視圖包含一系列帶有名稱的列和行數據。視圖的數據變化會影響到基表,基表的數據變化也會影響到視圖。
1. 基本使用
mysql> select * from user;
+----+-----+-----------+
| id | age | name |
+----+-----+-----------+
| 1 | 56 | 歐陽鋒 |
| 2 | 26 | 黃蓉 |
| 3 | 18 | 楊過 |
| 4 | 16 | 小龍女 |
| 5 | 36 | 郭靖 |
+----+-----+-----------+
5 rows in set (0.00 sec)-- 創建視圖
mysql> create view myview as select id,name from user;
Query OK, 0 rows affected (0.01 sec)mysql> select * from myview;
+----+-----------+
| id | name |
+----+-----------+
| 1 | 歐陽鋒 |
| 2 | 黃蓉 |
| 3 | 楊過 |
| 4 | 小龍女 |
| 5 | 郭靖 |
+----+-----------+
5 rows in set (0.00 sec)-- 更改視圖
mysql> update myview set name = 'aaa' where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from myview;
+----+-----------+
| id | name |
+----+-----------+
| 1 | aaa |
| 2 | 黃蓉 |
| 3 | 楊過 |
| 4 | 小龍女 |
| 5 | 郭靖 |
+----+-----------+
5 rows in set (0.00 sec)mysql> select * from user;
+----+-----+-----------+
| id | age | name |
+----+-----+-----------+
| 1 | 56 | aaa |
| 2 | 26 | 黃蓉 |
| 3 | 18 | 楊過 |
| 4 | 16 | 小龍女 |
| 5 | 36 | 郭靖 |
+----+-----+-----------+
5 rows in set (0.00 sec)-- 刪除視圖
mysql> drop view myview;
Query OK, 0 rows affected (0.01 sec)
2. 視圖的映射規則和限制
? 視圖與表一樣,必須唯一命名。
? 創建視圖數目無限制,但要考慮復雜查詢創建為視圖之后的性能影響視圖不能添加索引,也不能有關聯的觸發器或者默認值
? 視圖可以提高安全性,必須具有足夠的訪問權限 order by 可以用在視圖中,但是如果從該視圖檢索數據 select 中也含有 order by ,那么該視圖 中的 order by 將被覆蓋
? 視圖可以和表一起使用