視圖
視圖是一張虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。視圖的數據變化會影響到基表,基表的數據表花也會影響到視圖
基本使用
- 創建視圖
create ciew 視圖名 as select語句
- 案例
mysql> create view view_name as select ename,dname
from emp,dept where emp.deptno=dept.deptno;
mysql> select * from view_name;
+--------+------------+
| ename | dname |
+--------+------------+
| SMITH | RESEARCH |
| ALLEN | SALES |
| WARD | SALES |
| JONES | RESEARCH |
| MARTIN | SALES |
| BLAKE | SALES |
| CLARK | ACCOUNTING |
| SCOTT | RESEARCH |
- 修改了視圖,對基表數據有影響
mysql> update view_name set dname='sales' where ename='CLARK';
mysql> select * from emp where ename='CLARK';
+--------+-------+---------+------+---------------------+---------+------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+--------+-------+---------+------+---------------------+---------+------+--------+
| 007782 | CLARK | MANAGER | 7839 | 1981-06-09 00:00:00 | 2450.00 | NULL | 10 |
+--------+-------+---------+------+---------------------+---------+------+--------+
- 修改了基表,對視圖有影響
mysql> update emp set deptno=20 where ename='JAMES';
mysql> select * from view_name where ename='JAMES';
+-------+----------+
| ename | dname |
+-------+----------+
| JAMES | RESEARCH |
+-------+----------+
- 刪除視圖
drop view 視圖名
視圖的規則和限制
- 與表一樣,命名必須是唯一的(不能出現同名視圖或表名)
- 創建視圖數目無限制,但是要考慮複雜查詢創建爲視圖之後的性能影響。
- 視圖不能添加索引,也不能有關聯的觸發器或者默認值
- 視圖可以提高安全性,必須具有足夠的訪問權限
- order by可用在視圖中,但是如果從該視圖檢索數據select中含有order by ,那麼該視圖中的order by將被覆蓋。
- 視圖可以和表一起使用。