
*****
## 視圖
### 1\. 問題
對于復雜的查詢,往往是有多個數據表進行關聯查詢而得到,如果數據庫因為需求等原因發生了改變,為了保證查詢出來的數據與之前相同,則需要在多個地方進行修改,維護起來非常麻煩
<br>解決辦法:定義視圖
### 2\. 視圖是什么
通俗的講,視圖就是一條SELECT語句執行后返回的結果集。所以我們在創建視圖的時候,主要的工作就落在創建這條SQL查詢語句上。
<br>視圖是對若干張基本表的引用,一張虛表,查詢語句執行的結果,不存儲具體的數據(基本表數據發生了改變,視圖也會跟著改變);
<br>方便操作,特別是查詢操作,減少復雜的SQL語句,增強可讀性;
### 3\. 定義視圖
建議以v\_開頭
~~~
create view 視圖名稱 as select語句;
~~~
### 4\. 查看視圖
查看表會將所有的視圖也列出來
~~~
show tables;
~~~
### 5\. 使用視圖
視圖的用途就是查詢
~~~
select * from v_stu_score;
~~~
### 6\. 刪除視圖
~~~
drop view 視圖名稱;
例:
drop view v_stu_sco;
~~~
### 7.視圖案例
```
select p.id,p.`province`,c.`city` from provinces as p inner join cities as c on p.`provinceid` = c.provinceid having p.`province` = '黑龍江省';
```
### 8.視圖的修改
有下列內容之一,視圖不能做修改
- select子句中包含distinct
- select子句中包含組函數
- select語句中包含group by子句
- select語句中包含order by子句
- where子句中包含相關子查詢
- from子句中包含多個表
- 如果視圖中有計算列,則不能更新
- 如果基表中有某個具有非空約束的列未出現在視圖定義中,則不能做insert操作
### 9\. 視圖的作用
1. 提高了重用性,就像一個函數
2. 對數據庫重構,卻不影響程序的運行
3. 提高了安全性能,可以對不同的用戶
4. 讓數據更加清晰
- 1-數據庫-基本使用
- 1-1-數據存儲
- 1-2-數據庫
- 1-3-MySQL安裝和配置
- 1-4-SQL
- 1-5-數據完整性
- 1-6-命令行操作數據庫
- 2-MySQL查詢
- 2-1-MySQL查詢
- 2-2-條件
- 2-3-聚合函數
- 2-4-分組
- 2-5-排序
- 2-6-分頁
- 2-7-連接查詢
- 2-8-子查詢
- 2-9-自關聯
- 3-MySQL外鍵
- 4-MySQL與Python交互
- 4-1-數據準備
- 4-2-數據表的拆分
- 4-3-Python操作MySQL
- 5-MySQL高級
- 5-1-視圖
- 5-2-事務
- 5-3-索引
- 5-4-賬戶管理(了解)
- 6-數據庫存儲引擎
- 6-1-MyISAM存儲引擎
- 6-2-Innodb存儲引擎
- 6-3-CSV存儲引擎
- 6-4-Memory存儲引
- 7-MySQL基準測試
- 8-explain分析SQL語句
- 8-1-影響服務器性能的幾個方面
- 8-2-explain分析SQL
- 9-索引優化案例
- 10-索引優化
- 11-排序優化
- 12-慢查詢日志
- 13-Show Profile進行SQL分析
- 14-數據庫鎖
- 15-主從復制
- 16-MySQL分區表
- 17-MySQL操作規范