視圖
常見的資料庫物件

視圖概述
為什么使用視圖
可以幫助我們使用表中的部分資料,對其修改可以改變原來表中的值
可以簡化查詢
控制資料的訪問(權限)
視圖的理解
- 視圖是一種虛擬表,本身不具有資料的,占用極少的記憶體
- 視圖建立在已有表的基礎上,我們可以視圖所依據的表叫做基表
- 視圖的創建和洗掉只會影響視圖本身;但是當對視圖進行修改時,資料表中的資料也會變化,反之亦然
- 可以將視圖理解為,存盤起來的SELECT陳述句
- 小型專案,不推薦使用;大型專案,推薦使用(可以考慮)
創建視圖
在 CREATE VIEW 中創建(簡化版)
CREATE VIEW 視圖名字
AS 查詢陳述句
對于單表
情況一:視圖中的資料時基表里面有的
CREATE VIEW VU_emp1
AS
SELECT id,name,salary
FROM emp1;
#視圖中欄位的起名
方式一:別名
CREATE VIEW VU_emp2
AS
SELECT id emp_id,name,salary monthly_sal
FROM emp1;
方式二:直接命名
CREATE VIEW VU_emp2(emp_id,name,monthly_sal)#與查詢的欄位要一一對應
AS
SELECT id,name,salary
FROM emp1;
情況二:
視圖中的資料時基表中沒有的
#創建視圖:各個部門的平均工資(基表中沒有)
CREATE VIEW VU_emp2
AS
SELECT department_id,AUG(salary) AUG_sal
FROM empolyees
WHERE id department_id ids not null
GROUP BY department_id;
對于多表
#和多表查詢是一樣的
CREATE VIEW VU_emp3
AS
SELECT t1.id,t1.name,t2.department_name
FROM employees t1 JOIN departments t2
ON t1.name = t2.name;
利用視圖對資料進行格式化
CREATE VIEW VU_emp_dept1
AS
SELECT CONCAT(t1.name,'(',t2.department_name,')')
FROM employees t1 JOIN departments t2
ON t1.name = t2.name;

基于視圖創建視圖
CREATE VIEW VU_emp_dept1
AS
SELECT 要查詢的欄位
FROM 視圖名字;
查看視圖
- 查看資料庫的表物件,視圖物件
SHOW TABLES;
- 查看視圖的結構
DESC 視圖名字;
- 查看視圖的屬性資訊
SHOW TABLE STATUS LIKE '視圖名字';
SHOW TABLE STATUS LIKE '視圖名字'\G#有的可以執行
- 查看視圖詳細定義資訊
SHOW CREATE VIEW 視圖名字;
更新視圖的資料(增刪改)
一般情況可以更新
#改視圖
UPDATE vu_emp1
SET salary =6000
WHERE id = 2;
SELECT *
FROM emp1;


#改基表
UPDATE emp1
SET salary =15000
WHERE id = 2;
SELECT *
FROM vu_emp1;

二般更新失敗(針對于視圖是表中沒有的資料)
一般不進行更新

修改和洗掉視圖
修改視圖
方式一:使用 CREATE OR REPLACE VIEW修改視圖
CREATE OR REPLACE VIEW vn_emp1
AS
SELECT employe_id,name,salary,email#添加欄位 email
FROM employees
WHERE salary > 5000;
方式二:ALTER VIEW修改視圖
ALTER VIEW vu_emp1
AS
SELECT employe_id,name,salary,email,hire_data#繼續添加欄位 hire_data
FROM employees
WHERE salary > 5000;
洗掉視圖
DROP VIEW IF EXISTS (視圖名字1,視圖名字2...);
注:若視圖c是基于視圖a,b創建的,如果洗掉a或是b,則會影響視圖c的查詢,這樣的視圖c我們需要手動洗掉,否則會影響使用
總結
視圖的優點
- 操作簡單
- 減少資料冗余
- 資料安全(控制訪問權限)
- 適應靈活多變的需求
- 可以分解復雜的查詢邏輯
視圖的不足
- 表中的結構發生改變,我們所構建的視圖也需要相應的維護
- 維護成本很高
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/445415.html
標籤:其他
下一篇:【資料庫】優化SQL語言
