MySQL视图
什么是视图
mysql5.1版本出现的新特性,本身是一个虚拟表,它的数据来自于表,通过执行时动态生成。
好处:
- 简化sql语句
- 提高了sql的重用性
- 保护基表的数据,提高了安全性
使用
创建
create view 视图名
as
查询语句;
修改
//方式一:
create or replace view 视图名
as
查询语句;
//方式二:
alter view 视图名
as
查询语句
删除
drop view 视图1,视图2,...;
查看
desc 视图名;
show create view 视图名;
注意
不是所有的视图都可以做DML操作。有下列内容之一,视图不能做DML操作:
①select子句中包含distinct
②select子句中包含组函数
③select语句中包含group by子句
④select语句中包含order by子句
⑤select语句中包含union 、union all等集合运算符
⑥where子句中包含相关子查询
⑦from子句中包含多个表
⑧如果视图中有计算列,则不能更新
⑨如果基表中有某个具有非空约束的列未出现在视图定义中,则不能做insert操作
视图一般用于查询的,而不是更新,所以具备以下特点的视图都不允许更新
①包含分组函数、group by、distinct、having、union、
②join
③常量视图
④where后的子查询用到了from中的表
⑤用到了不可更新的视图
视图和表的对比
关键字 | 是否占用物理空间 | 使用 |
---|---|---|
视图view | 占用较小,只保存sql逻辑 | 一般用于查询 |
表table | 保存实际的数据 | 增删改查 |
案例
一、创建视图emp_v1,要求查询电话号码以‘011’开头的员工姓名和工资、邮箱
CREATE OR REPLACE VIEW emp_v1
AS
SELECT last_name,salary,email
FROM employees
WHERE phone_number LIKE '011%';
二、创建视图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;