MySQL:檢視
阿新 • • 發佈:2020-11-12
MySQL:檢視
介紹
一種虛擬存在的表,和普通表一樣使用
行和列的資料來自定義檢視的查詢中使用的表,並且是使用檢視時動態生成,只儲存了sql邏輯不儲存查詢結果
mysql5.1版本出現的新特性,是通過表動態生成的資料。
應用場景
- 多個地方用到同樣的查詢結果
- 該查詢結果使用的sql語句較複雜
- 重用sql語句
- 簡化複雜的sql操作,不必知道他的查詢細節
- 保護資料,提高安全性
建立檢視
create view 檢視名 as 查詢語句;
案例
# 案例1: 查詢有相中包含a字元的員工名、部門名、工種資訊 # 建立檢視 create view myv1 as select name,department,job_titlefrom employees e join departments d on e.department_id=d.department_id join jobs j on j.job_id=e.job_id; # 使用 select * form myv1 where name like '%a%'; # 案例2: 查詢各部門的平均工資級別 create view myv2 as select avg(salary) ag,department_id from employees group by departmetn_id; select myv2.`ag`,g.grage_levelfrom myv2 join job_grades g on myv2. `ag` between g.`lowest_sal` and g.`highest_sal`; # 案例3:查詢平均工資最低的部門資訊 select * from myv2 order by ag limit 1; # 案例4:查詢平均工資最低的部門名和工資 create view myv3 as select * from myv2 order by ag limit 1; select d.*,m.ag from myv3 m join departments d on m.`department_id`=d.`department_id`;
修改檢視
# 方式1 create or replace view 檢視名 as 查詢語句; # 方式2 alter view 檢視名 as 查詢語句;
刪除檢視
drop view 檢視名1,檢視名2...
檢視檢視
#方式1, 推薦 desc myv3; # 方式2 show create view myv3\G; # \G格式化輸出
案例
# 案例1 建立檢視emp_v1, 要求查詢電話號碼以 "011"開頭的員工姓名和工資,郵箱 create or replace view emp_v1 as select name,salary,email from employees where phone_num link "011%"; # 案例2 建立檢視emp_v2, 要求查詢部門的最高工資高於12000的部門資訊 create or replace view emp_v2 as select max(salary) mx_dep, department_id from employees group by department_id having max(salary)>12000; select d.*,m.mx_dep from departments d join emp_v2 m on m.department_id=d.department_id;
檢視的更新
檢視的可更改性和試圖中查詢的定義有關係,一下型別的檢視是不能更新的。
-
- 包含以下關鍵字的sql語句:分組函式,distinct, group by, having, union, union all
- 常量檢視
- select 中包含子查詢
- join
- from 一個不能更新的檢視
- where子句的子查詢引用了from子句中的表
/* create view myv1 as select name,email from employees; 1. 插入: 有些情況可以成功,有些情況不會成功,也不報錯; insert into myv1 values(); 2. 修改 update myv1 set name='jhon' where name='Mary' 3. 刪除 delete from myv1 where name='jhon'; */
檢視和表
建立語法 | 佔用物理空間 | 使用 | |
檢視 | create view | 只是儲存了sql邏輯 | 增刪改查,一般不能增刪改 |
表 | create table | 儲存了資料 | 增刪改查 |