1. 程式人生 > 實用技巧 >MySQL:檢視

MySQL:檢視

MySQL:檢視

介紹

  一種虛擬存在的表,和普通表一樣使用

  行和列的資料來自定義檢視的查詢中使用的表,並且是使用檢視時動態生成,只儲存了sql邏輯不儲存查詢結果

  mysql5.1版本出現的新特性,是通過表動態生成的資料。

應用場景

  • 多個地方用到同樣的查詢結果
  • 該查詢結果使用的sql語句較複雜
  • 重用sql語句
  • 簡化複雜的sql操作,不必知道他的查詢細節
  • 保護資料,提高安全性

建立檢視

create view 檢視名
as
查詢語句;

案例

# 案例1: 查詢有相中包含a字元的員工名、部門名、工種資訊
# 建立檢視
create view myv1
as 
select name,department,job_title
from 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_level
from 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 儲存了資料 增刪改查